@anzusystems/common-admin 1.47.0-beta.dev-1784059879-fix1 → 1.47.0-beta.dev-1788935854

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/package.json CHANGED
@@ -3,24 +3,28 @@
3
3
  "packageManager": "yarn@4.18.0",
4
4
  "files": [
5
5
  "dist",
6
- "src/eslint"
6
+ "src/eslint/**"
7
7
  ],
8
- "module": "./dist/common-admin.es.js",
8
+ "module": "./dist/common-admin.js",
9
9
  "types": "./dist/common-admin.d.ts",
10
10
  "exports": {
11
11
  ".": {
12
12
  "import": "./dist/common-admin.js",
13
13
  "types": "./dist/common-admin.d.ts"
14
14
  },
15
- "./styles": "./dist/common-admin.css",
15
+ "./styles": {
16
+ "types": "./dist/common-admin.css.d.ts",
17
+ "default": "./dist/common-admin.css"
18
+ },
16
19
  "./labs": {
17
20
  "import": "./dist/labs.js",
18
21
  "types": "./dist/labs.d.ts"
19
22
  },
20
23
  "./eslint": "./src/eslint/plugin.mjs",
24
+ "./oxlint": "./src/eslint/oxlint.mjs",
21
25
  "./*": "./*"
22
26
  },
23
- "version": "1.47.0-beta.dev-1784059879-fix1",
27
+ "version": "1.47.0-beta.dev-1788935854",
24
28
  "license": "Apache-2.0",
25
29
  "repository": {
26
30
  "type": "git",
@@ -30,25 +34,25 @@
30
34
  "prepare": "node -e \"if (process.env.SKIP_PLAYWRIGHT_INSTALL !== 'true') { require('child_process').execSync('playwright install chromium --with-deps', { stdio: 'inherit' }) }\"",
31
35
  "docs:dev": "vitepress dev docs",
32
36
  "docs:build-only": "vitepress build docs",
33
- "docs:build": "yarn build ; yarn docs:build-only",
37
+ "docs:build": "run-s build docs:build-only",
34
38
  "docs:preview": "vitepress preview docs",
35
39
  "playground:dev": "vite",
36
40
  "playground:build": "vite build",
37
41
  "playground:build:nm": "vite build --minify false",
38
- "build": "vite build --config vite.config.lib.ts",
39
- "build:dev": "vite build --minify false --sourcemap true --config vite.config.lib.ts",
40
- "lib:build": "vite build --config vite.config.lib.ts",
41
- "ci": "run-s --print-name lint:tsc lint:oxlint lint:eslint lint:stylelint",
42
+ "build": "vite build --config vite.config.lib.mts",
43
+ "build:dev": "vite build --minify false --sourcemap true --config vite.config.lib.mts",
44
+ "lib:build": "run-s --print-name lint:tsc build",
45
+ "ci": "run-p --aggregate-output --continue-on-error --print-label --silent lint:tsc format:check lint:oxlint lint:eslint lint:stylelint",
42
46
  "lint": "[ \"$*\" = \"--fix\" ] && yarn lint:fix || yarn ci",
43
47
  "lint:fix": "run-s --print-name lint:tsc format lint:oxlint:fix lint:eslint:fix lint:stylelint:fix",
44
48
  "lint:tsc": "NODE_OPTIONS=--max-old-space-size=4096 vue-tsc --build",
45
49
  "lint:tsc:test": "NODE_OPTIONS=--max-old-space-size=4096 vue-tsc --build tsconfig.test.json",
46
- "lint:eslint": "eslint",
47
- "lint:eslint:fix": "eslint --fix",
50
+ "lint:eslint": "eslint --cache",
51
+ "lint:eslint:fix": "eslint --fix --cache",
48
52
  "lint:oxlint": "oxlint .",
49
53
  "lint:oxlint:fix": "oxlint . --fix",
50
- "lint:stylelint": "stylelint src/**/*.{scss,vue}",
51
- "lint:stylelint:fix": "stylelint src/**/*.{scss,vue} --fix",
54
+ "lint:stylelint": "stylelint src/**/*.{scss,vue} --cache",
55
+ "lint:stylelint:fix": "stylelint src/**/*.{scss,vue} --fix --cache",
52
56
  "format": "oxfmt src/",
53
57
  "format:check": "oxfmt src/ --check",
54
58
  "test": "vitest",
@@ -60,19 +64,18 @@
60
64
  "@intlify/unplugin-vue-i18n": "^11.2.5",
61
65
  "@kyvg/vue3-notification": "^3.4.2",
62
66
  "@mdi/font": "^7.4.47",
63
- "@microsoft/api-extractor": "^7.59.0",
64
- "@sentry/vue": "^10.73.0",
67
+ "@microsoft/api-extractor": "^7.59.1",
68
+ "@sentry/vue": "^10.74.0",
65
69
  "@shikijs/vitepress-twoslash": "^4.4.3",
66
- "@stylistic/eslint-plugin": "^5.10.0",
67
70
  "@tsconfig/node22": "^22.0.6",
68
- "@types/node": "^24.13.3",
71
+ "@types/node": "^24.13.4",
69
72
  "@types/rusha": "^0.8.3",
70
73
  "@types/sortablejs": "^1.15.9",
71
74
  "@types/webfontloader": "^1.6.38",
72
75
  "@vitejs/plugin-vue": "^6.0.8",
73
- "@vitest/browser": "^4.1.11",
74
- "@vitest/browser-playwright": "^4.1.11",
75
- "@vitest/ui": "^4.1.11",
76
+ "@vitest/browser": "^5.0.0",
77
+ "@vitest/browser-playwright": "^5.0.0",
78
+ "@vitest/ui": "^5.0.0",
76
79
  "@vue/compiler-dom": "3.5.42",
77
80
  "@vue/devtools-api": "^8.2.1",
78
81
  "@vue/eslint-config-typescript": "^14.9.0",
@@ -86,41 +89,42 @@
86
89
  "axios": "1.20.0",
87
90
  "cropperjs": "^1.6.3",
88
91
  "dayjs": "1.11.23",
89
- "eslint": "^10.9.1",
90
- "eslint-plugin-oxlint": "1.80.0",
91
- "eslint-plugin-vue": "10.10.0",
92
+ "eslint": "^10.10.0",
93
+ "eslint-config-prettier": "^10.1.8",
94
+ "eslint-plugin-oxlint": "1.82.0",
95
+ "eslint-plugin-vue": "10.11.0",
92
96
  "eslint-plugin-vuetify": "^2.7.2",
93
97
  "npm-run-all2": "^9.0.3",
94
- "oxfmt": "^0.65.0",
95
- "oxlint": "1.80.0",
98
+ "oxfmt": "^0.67.0",
99
+ "oxlint": "1.82.0",
96
100
  "pinia": "4.0.3",
97
- "playwright": "^1.62.1",
98
- "postcss": "^8.5.26",
101
+ "playwright": "^1.63.0",
102
+ "postcss": "^8.5.28",
99
103
  "postcss-html": "^2.0.0",
100
- "postcss-prefix-selector": "^2.2.0",
104
+ "postcss-prefix-selector": "^2.2.1",
101
105
  "rusha": "^0.8.14",
102
- "sass": "1.103.1",
106
+ "sass": "1.104.0",
103
107
  "socket.io-client": "4.8.3",
104
108
  "sortablejs": "^1.15.7",
105
- "stylelint": "17.14.1",
109
+ "stylelint": "17.15.0",
106
110
  "stylelint-config-html": "^2.0.0",
107
111
  "stylelint-config-recommended": "^18.0.0",
108
112
  "stylelint-config-recommended-vue": "^2.0.0",
109
113
  "stylelint-config-standard-scss": "^17.0.0",
110
- "typescript": "5.9.3",
114
+ "typescript": "~6.0.3",
111
115
  "unplugin": "3.3.0",
112
- "unplugin-dts": "^1.0.3",
116
+ "unplugin-dts": "^1.1.0",
113
117
  "uuid": "^14.0.2",
114
- "vite": "7.3.6",
118
+ "vite": "8.3.0",
115
119
  "vite-plugin-vuetify": "^2.1.3",
116
120
  "vitepress": "1.6.4",
117
- "vitest": "^4.1.11",
121
+ "vitest": "^5.0.0",
118
122
  "vue": "3.5.42",
119
123
  "vue-eslint-parser": "^10.4.1",
120
124
  "vue-i18n": "11.4.10",
121
- "vue-router": "5.3.0",
125
+ "vue-router": "5.3.1",
122
126
  "vue-tsc": "3.3.11",
123
- "vuetify": "4.1.12",
127
+ "vuetify": "4.2.1",
124
128
  "webfontloader": "^1.6.28"
125
129
  },
126
130
  "peerDependencies": {
@@ -0,0 +1,30 @@
1
+ import { anzuPlugin } from './plugin.mjs'
2
+
3
+ /**
4
+ * Oxlint entry point for the Anzu rules.
5
+ *
6
+ * The rules operate on the standard ESTree AST, so oxlint runs them through its
7
+ * JS plugin bridge with output identical to ESLint - including .vue <script>
8
+ * blocks, scope analysis and autofix.
9
+ *
10
+ * Usage in .oxlintrc.json:
11
+ *
12
+ * {
13
+ * "jsPlugins": ["@anzusystems/common-admin/oxlint"],
14
+ * "rules": {
15
+ * "anzu/no-ts-extension": "error",
16
+ * "anzu/no-fatal-error-axios-check": "error",
17
+ * "anzu/url-params-match-template": "error",
18
+ * "anzu/no-deprecated-imports": ["error", { "rules": [...] }]
19
+ * }
20
+ * }
21
+ *
22
+ * When these are enabled here, turn them off in eslint.config.mjs - oxlint's
23
+ * `buildFromOxlintConfigFile` does not know about third-party rule names.
24
+ *
25
+ * NOTE: oxlint JS plugins are alpha and not subject to semver.
26
+ */
27
+ export default {
28
+ meta: { name: 'anzu' },
29
+ rules: anzuPlugin.rules,
30
+ }
@@ -203,41 +203,52 @@ const anzuPlugin = {
203
203
  return rule.path
204
204
  })
205
205
 
206
- return {
207
- ImportDeclaration(node) {
208
- const filename = context.filename
209
- const normalizedFilename = filename.replace(/\\/g, '/')
210
-
211
- // Check manual skip list
212
- if (skipFiles.some((skip) => normalizedFilename.endsWith(skip))) return
213
-
214
- // Auto-skip source files of path-based rules
215
- if (
216
- ruleFilePaths.some(
217
- (rulePath) =>
218
- normalizedFilename.endsWith(rulePath + '.ts') ||
219
- normalizedFilename.endsWith(rulePath + '.js') ||
220
- normalizedFilename.endsWith(rulePath + '.vue') ||
221
- normalizedFilename.endsWith(rulePath),
222
- )
206
+ // Index rules by the module specifier they match, so one import is
207
+ // resolved by a single Map lookup instead of scanning every rule.
208
+ const rulesBySource = new Map()
209
+ for (const rule of deprecationRules) {
210
+ const matchPath = rule.path || rule.module
211
+ if (!matchPath) continue
212
+ const entry = { matchPath, imports: new Set(rule.imports) }
213
+ const existing = rulesBySource.get(matchPath)
214
+ if (existing) existing.push(entry)
215
+ else rulesBySource.set(matchPath, [entry])
216
+ }
217
+
218
+ // Skipping depends only on the file name, so resolve it once per file
219
+ // instead of once per import declaration.
220
+ let fileSkipped = null
221
+ const isFileSkipped = () => {
222
+ if (fileSkipped !== null) return fileSkipped
223
+ const normalizedFilename = context.filename.replace(/\\/g, '/')
224
+ fileSkipped =
225
+ skipFiles.some((skip) => normalizedFilename.endsWith(skip)) ||
226
+ ruleFilePaths.some(
227
+ (rulePath) =>
228
+ normalizedFilename.endsWith(rulePath + '.ts') ||
229
+ normalizedFilename.endsWith(rulePath + '.js') ||
230
+ normalizedFilename.endsWith(rulePath + '.vue') ||
231
+ normalizedFilename.endsWith(rulePath),
223
232
  )
224
- return
233
+ return fileSkipped
234
+ }
225
235
 
236
+ return {
237
+ ImportDeclaration(node) {
226
238
  const source = node.source.value
227
239
  if (typeof source !== 'string') return
228
240
 
229
- for (const rule of deprecationRules) {
230
- const matchPath = rule.path || rule.module
231
- if (!matchPath || source !== matchPath) continue
232
-
233
- const deprecatedImports = node.specifiers
234
- .filter((spec) => spec.type === 'ImportSpecifier')
235
- .filter((spec) => rule.imports.includes(spec.imported.name))
241
+ const entries = rulesBySource.get(source)
242
+ if (!entries) return
243
+ if (isFileSkipped()) return
236
244
 
237
- for (const importSpec of deprecatedImports) {
245
+ for (const { matchPath, imports } of entries) {
246
+ for (const spec of node.specifiers) {
247
+ if (spec.type !== 'ImportSpecifier') continue
248
+ if (!imports.has(spec.imported.name)) continue
238
249
  context.report({
239
- node: importSpec,
240
- message: `'${importSpec.imported.name}' from '${matchPath}' is deprecated`,
250
+ node: spec,
251
+ message: `'${spec.imported.name}' from '${matchPath}' is deprecated`,
241
252
  })
242
253
  }
243
254
  }