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.
Files changed (113) hide show
  1. package/dist/cli/buildThemes.d.ts +3 -0
  2. package/dist/cli/buildThemes.d.ts.map +1 -0
  3. package/{src/cli/buildThemes.ts → dist/cli/buildThemes.js} +77 -121
  4. package/dist/cli/buildThemes.js.map +1 -0
  5. package/dist/config/default.d.ts +16 -0
  6. package/dist/config/default.d.ts.map +1 -0
  7. package/{src/config/default.ts → dist/config/default.js} +2 -11
  8. package/dist/config/default.js.map +1 -0
  9. package/dist/core/configResolver.d.ts +38 -0
  10. package/dist/core/configResolver.d.ts.map +1 -0
  11. package/{src/core/configResolver.ts → dist/core/configResolver.js} +21 -60
  12. package/dist/core/configResolver.js.map +1 -0
  13. package/dist/core/contractValidator.d.ts +16 -0
  14. package/dist/core/contractValidator.d.ts.map +1 -0
  15. package/{src/core/contractValidator.ts → dist/core/contractValidator.js} +3 -10
  16. package/dist/core/contractValidator.js.map +1 -0
  17. package/dist/core/cssResolver.d.ts +5 -0
  18. package/dist/core/cssResolver.d.ts.map +1 -0
  19. package/{src/core/cssResolver.ts → dist/core/cssResolver.js} +26 -53
  20. package/dist/core/cssResolver.js.map +1 -0
  21. package/dist/core/generateInterceptors.d.ts +10 -0
  22. package/dist/core/generateInterceptors.d.ts.map +1 -0
  23. package/{src/core/generateInterceptors.ts → dist/core/generateInterceptors.js} +55 -109
  24. package/dist/core/generateInterceptors.js.map +1 -0
  25. package/dist/core/generateJsconfig.d.ts +45 -0
  26. package/dist/core/generateJsconfig.d.ts.map +1 -0
  27. package/{src/core/generateJsconfig.ts → dist/core/generateJsconfig.js} +32 -55
  28. package/dist/core/generateJsconfig.js.map +1 -0
  29. package/dist/core/moduleResolver.d.ts +22 -0
  30. package/dist/core/moduleResolver.d.ts.map +1 -0
  31. package/{src/core/moduleResolver.ts → dist/core/moduleResolver.js} +28 -62
  32. package/dist/core/moduleResolver.js.map +1 -0
  33. package/dist/core/preCompileFiles.d.ts +6 -0
  34. package/dist/core/preCompileFiles.d.ts.map +1 -0
  35. package/{src/core/preCompileFiles.ts → dist/core/preCompileFiles.js} +22 -48
  36. package/dist/core/preCompileFiles.js.map +1 -0
  37. package/dist/core/preCompileMagentoFiles.d.ts +3 -0
  38. package/dist/core/preCompileMagentoFiles.d.ts.map +1 -0
  39. package/{src/core/preCompileMagentoFiles.ts → dist/core/preCompileMagentoFiles.js} +4 -10
  40. package/dist/core/preCompileMagentoFiles.js.map +1 -0
  41. package/dist/core/themeResolverSync.d.ts +6 -0
  42. package/dist/core/themeResolverSync.d.ts.map +1 -0
  43. package/{src/core/themeResolverSync.ts → dist/core/themeResolverSync.js} +25 -26
  44. package/dist/core/themeResolverSync.js.map +1 -0
  45. package/dist/runtime/i18nCore.d.ts +71 -0
  46. package/dist/runtime/i18nCore.d.ts.map +1 -0
  47. package/{src/runtime/i18nCore.ts → dist/runtime/i18nCore.js} +47 -49
  48. package/dist/runtime/i18nCore.js.map +1 -0
  49. package/dist/runtime/interceptorManager.d.ts +45 -0
  50. package/dist/runtime/interceptorManager.d.ts.map +1 -0
  51. package/{src/runtime/interceptorManager.ts → dist/runtime/interceptorManager.js} +14 -72
  52. package/dist/runtime/interceptorManager.js.map +1 -0
  53. package/dist/runtime/islands.d.ts +45 -0
  54. package/dist/runtime/islands.d.ts.map +1 -0
  55. package/{src/runtime/islands.ts → dist/runtime/islands.js} +5 -30
  56. package/dist/runtime/islands.js.map +1 -0
  57. package/dist/runtime/sectionStoreCore.d.ts +108 -0
  58. package/dist/runtime/sectionStoreCore.d.ts.map +1 -0
  59. package/{src/runtime/sectionStoreCore.ts → dist/runtime/sectionStoreCore.js} +23 -93
  60. package/dist/runtime/sectionStoreCore.js.map +1 -0
  61. package/dist/utils/findComponents.d.ts +17 -0
  62. package/dist/utils/findComponents.d.ts.map +1 -0
  63. package/dist/utils/findComponents.js +66 -0
  64. package/dist/utils/findComponents.js.map +1 -0
  65. package/dist/utils/runWithConcurrency.d.ts +10 -0
  66. package/dist/utils/runWithConcurrency.d.ts.map +1 -0
  67. package/{src/utils/runWithConcurrency.ts → dist/utils/runWithConcurrency.js} +3 -9
  68. package/dist/utils/runWithConcurrency.js.map +1 -0
  69. package/dist/vite/defaultNodeResolver.d.ts +9 -0
  70. package/dist/vite/defaultNodeResolver.d.ts.map +1 -0
  71. package/{src/vite/defaultNodeResolver.ts → dist/vite/defaultNodeResolver.js} +3 -1
  72. package/dist/vite/defaultNodeResolver.js.map +1 -0
  73. package/dist/vite/inheritAssetsModuleResolver.d.ts +8 -0
  74. package/dist/vite/inheritAssetsModuleResolver.d.ts.map +1 -0
  75. package/{src/vite/inheritAssetsModuleResolver.ts → dist/vite/inheritAssetsModuleResolver.js} +6 -20
  76. package/dist/vite/inheritAssetsModuleResolver.js.map +1 -0
  77. package/dist/vite/inheritModuleResolver.d.ts +8 -0
  78. package/dist/vite/inheritModuleResolver.d.ts.map +1 -0
  79. package/{src/vite/inheritModuleResolver.ts → dist/vite/inheritModuleResolver.js} +4 -9
  80. package/dist/vite/inheritModuleResolver.js.map +1 -0
  81. package/dist/vite/interceptorsPlugin.d.ts +10 -0
  82. package/dist/vite/interceptorsPlugin.d.ts.map +1 -0
  83. package/{src/vite/interceptorsPlugin.ts → dist/vite/interceptorsPlugin.js} +12 -29
  84. package/dist/vite/interceptorsPlugin.js.map +1 -0
  85. package/dist/vite/magentoHrmRewrite.d.ts +6 -0
  86. package/dist/vite/magentoHrmRewrite.d.ts.map +1 -0
  87. package/{src/vite/magentoHrmRewrite.ts → dist/vite/magentoHrmRewrite.js} +16 -15
  88. package/dist/vite/magentoHrmRewrite.js.map +1 -0
  89. package/dist/vite/sharedPlugins.d.ts +35 -0
  90. package/dist/vite/sharedPlugins.d.ts.map +1 -0
  91. package/{src/vite/sharedPlugins.ts → dist/vite/sharedPlugins.js} +7 -9
  92. package/dist/vite/sharedPlugins.js.map +1 -0
  93. package/dist/vite/themeSourceWatcher.d.ts +16 -0
  94. package/dist/vite/themeSourceWatcher.d.ts.map +1 -0
  95. package/{src/vite/themeSourceWatcher.ts → dist/vite/themeSourceWatcher.js} +19 -24
  96. package/dist/vite/themeSourceWatcher.js.map +1 -0
  97. package/dist/vite/unresolvedModuleGuard.d.ts +17 -0
  98. package/dist/vite/unresolvedModuleGuard.d.ts.map +1 -0
  99. package/{src/vite/unresolvedModuleGuard.ts → dist/vite/unresolvedModuleGuard.js} +27 -27
  100. package/dist/vite/unresolvedModuleGuard.js.map +1 -0
  101. package/package.json +60 -10
  102. package/.github/workflows/ci.yml +0 -38
  103. package/.github/workflows/publish.yml +0 -36
  104. package/.oxlintrc.json +0 -19
  105. package/.prettierignore +0 -7
  106. package/.prettierrc.json +0 -7
  107. package/eslint.config.js +0 -24
  108. package/pnpm-workspace.yaml +0 -4
  109. package/src/utils/findComponents.ts +0 -83
  110. package/tsconfig.json +0 -34
  111. package/vitest.config.js +0 -18
  112. /package/{src → dist}/config/eslint.js +0 -0
  113. /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.ts";
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++) dp[i][0] = i;
13
- for (let j = 0; j < cols; j++) dp[0][j] = j;
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
- function suggest(namespace: string, target: string): string[] {
24
- let keys: string[];
22
+ function suggest(namespace, target) {
23
+ let keys;
25
24
  try {
26
25
  keys = Object.keys(moduleResolver.getAllJsVueFilesWithInheritanceCached());
27
- } catch {
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)] as const)
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
- ` <theme>/${namespace}/web/${rest} or the module at` +
49
- ` <module>/view/frontend/web/${rest}.`;
50
- } else {
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
- ` and compatible, and the contract regenerated` +
56
- ` (bin/magento mage-obsidian:frontend:config --generate)?`;
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: string, importer?: string) {
77
- if (!id || id[0] === "\0") return;
73
+ handler(id, importer) {
74
+ if (!id || id[0] === "\0")
75
+ return;
78
76
  const separator = id.indexOf("::");
79
- if (separator === -1) return;
77
+ if (separator === -1)
78
+ return;
80
79
  const namespace = id.slice(0, separator);
81
- if (!NAMESPACE_PATTERN.test(namespace)) return;
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.0.0",
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": "./src/cli/buildThemes.ts",
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": "./src/cli/buildThemes.ts"
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
- ".": "./src/cli/buildThemes.ts",
30
- "./core/*": "./src/core/*",
31
- "./vite/*": "./src/vite/*",
32
- "./runtime/*": "./src/runtime/*",
33
- "./cli/*": "./src/cli/*",
34
- "./utils/*": "./src/utils/*",
35
- "./config/*": "./src/config/*"
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",
@@ -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
@@ -1,7 +0,0 @@
1
- node_modules
2
- .precompiled
3
- pnpm-lock.yaml
4
- src/__tests__/magento_scenarios
5
- src/__tests__/fixtures
6
- src/__tests__/__mocks__
7
- src/templates
package/.prettierrc.json DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "tabWidth": 4,
3
- "printWidth": 100,
4
- "semi": true,
5
- "singleQuote": false,
6
- "trailingComma": "all"
7
- }
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
- ];
@@ -1,4 +0,0 @@
1
- # esbuild (pulled in by Vitest) ships its binary via the platform-specific
2
- # @esbuild/<platform> package, so its postinstall script is not required.
3
- allowBuilds:
4
- esbuild: false
@@ -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