diff --git a/CHANGELOG.md b/CHANGELOG.md index b6f5801..4cbbdec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,4 +6,4 @@ All notable changes to `@bquery/eslint-plugin` are documented here. The format f ### Added -- Initial release: five bQuery-specific rules and a recommended flat config ([bQuery/bQuery#228](https://github.com/bQuery/bQuery/issues/228), developed in [bQuery/bQuery#278](https://github.com/bQuery/bQuery/pull/278)): `no-top-level-dollar`, `prefer-scoped-reactivity`, `no-dynamic-trusted-html`, `no-value-in-untracked` (reports only identifiers initialised from a bQuery signal factory, so DOM `input.value` and other non-signal `.value` reads are not flagged) and `prefer-subpath-imports` (autofixes root imports to module subpaths from an export map generated from the published `@bquery/bquery` declaration files). +- Initial release: five bQuery-specific rules and a recommended flat config ([bQuery/bQuery#228](https://github.com/bQuery/bQuery/issues/228), developed in [bQuery/bQuery#278](https://github.com/bQuery/bQuery/pull/278)): `no-top-level-dollar`, `prefer-scoped-reactivity`, `no-dynamic-trusted-html`, `no-value-in-untracked` (reports only identifiers initialised from a bQuery signal factory, so DOM `input.value` and other non-signal `.value` reads are not flagged) and `prefer-subpath-imports` (autofixes root imports to module subpaths from an export map generated from the published `@bquery/bquery` declaration files; built against bQuery 1.18.0, so 1.18 root exports such as `createSchemaForm` and `useSchemaForm` (`forms`), `validate` (`server`) and `EmptyStoreRecord` (`store`) are fixed too). diff --git a/bun.lock b/bun.lock index 4216daa..a34a237 100644 --- a/bun.lock +++ b/bun.lock @@ -5,7 +5,7 @@ "": { "name": "@bquery/eslint-plugin", "devDependencies": { - "@bquery/bquery": "^1.17.2", + "@bquery/bquery": "^1.18.0", "@typescript-eslint/eslint-plugin": "^8.72.0", "@typescript-eslint/parser": "^8.72.0", "bun-types": "^1.4.3", @@ -21,7 +21,7 @@ }, }, "packages": { - "@bquery/bquery": ["@bquery/bquery@1.17.2", "", { "bin": { "bquery-i18n": "bin/bquery-i18n.mjs", "bquery-view-compile": "bin/bquery-view-compile.mjs" } }, "sha512-An8W68G5AXZbRXjaZTEWTz+EWWPE3n7ySIbCRYu0xgsBJ1pD3svemGXOXtwDlEd5BXsYMx3Y2yuXCxFoGoyPHQ=="], + "@bquery/bquery": ["@bquery/bquery@1.18.0", "", { "bin": { "bquery-i18n": "bin/bquery-i18n.mjs", "create-bquery": "bin/create-bquery.mjs", "bquery-view-compile": "bin/bquery-view-compile.mjs" } }, "sha512-8rR0q4SXRccs/TsdB5IOh2y/4dS7+AYsXvUrOnhouJ81l8nSzPegzx/dJ41Blj3oPq+CpcuRLNa9NSBSXc7skg=="], "@cacheable/memory": ["@cacheable/memory@2.2.0", "", { "dependencies": { "@cacheable/utils": "^2.5.0", "@keyv/bigmap": "^1.3.1", "hookified": "^1.15.1", "keyv": "^5.6.0" } }, "sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ=="], diff --git a/package.json b/package.json index 3b5ff64..65df43e 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "eslint": ">=9" }, "devDependencies": { - "@bquery/bquery": "^1.17.2", + "@bquery/bquery": "^1.18.0", "@typescript-eslint/eslint-plugin": "^8.72.0", "@typescript-eslint/parser": "^8.72.0", "bun-types": "^1.4.3", diff --git a/src/export-map.json b/src/export-map.json index bbb00ec..8f70fca 100644 --- a/src/export-map.json +++ b/src/export-map.json @@ -140,6 +140,7 @@ "ElementBoundingRect": "media", "ElementBounds": "motion", "ElementSize": "media", + "EmptyStoreRecord": "store", "EventSourceStatus": "reactive", "FetchInput": "reactive", "FieldArrayConfig": "forms", @@ -351,6 +352,9 @@ "SanitizedHtml": "security", "SanitizerBackend": "security", "SchemaEntry": "forms", + "SchemaFormConfig": "forms", + "SchemaFormValues": "forms", + "SchemaIssue": "forms", "ScrollAnimateCleanup": "motion", "ScrollAnimateOptions": "motion", "ScrollProgressCleanup": "motion", @@ -414,6 +418,7 @@ "StaggerFunction": "motion", "StaggerOptions": "motion", "StandaloneResumableBoundary": "ssr", + "StandardSchemaV1": "forms", "StartTransitionOptions": "concurrency", "StateFactory": "store", "StepPosition": "motion", @@ -506,6 +511,9 @@ "UseWebSocketChannelReturn": "reactive", "UseWebSocketOptions": "reactive", "UseWebSocketReturn": "reactive", + "ValidateMiddleware": "server", + "ValidateOptions": "server", + "ValidateSource": "server", "ValidationResult": "forms", "Validator": "forms", "VerifyHydrationOptions": "ssr", @@ -619,6 +627,7 @@ "createSSRHandler": "ssr", "createSSRMetrics": "ssr", "createSSRRouterContext": "ssr", + "createSchemaForm": "forms", "createServer": "server", "createSharedBuffer": "concurrency", "createStore": "store", @@ -1117,6 +1126,7 @@ "useResourceList": "reactive", "useRoute": "router", "useRouteData": "router", + "useSchemaForm": "forms", "useScroll": "media", "useShare": "media", "useShareSupported": "media", @@ -1134,6 +1144,7 @@ "utils": "core", "uuid": "core", "validDate": "forms", + "validate": "server", "verifyHydration": "ssr", "waitFor": "testing", "watch": "reactive", diff --git a/src/rules/no-value-in-untracked.js b/src/rules/no-value-in-untracked.js index 0d1c975..00b5973 100644 --- a/src/rules/no-value-in-untracked.js +++ b/src/rules/no-value-in-untracked.js @@ -26,7 +26,7 @@ const SOURCES = bquerySources('reactive'); * bQuery factories whose result has a tracked `.value` and an untracked * `.peek()` (they return `Signal`, `Computed`, `LinkedSignal` or * `ReadonlySignal`), grouped by the module that exports them. Checked against - * the published `@bquery/bquery` 1.17 declaration files. + * the published `@bquery/bquery` 1.18 declaration files. * * @type {Array<[Set, Set]>} */ diff --git a/test/export-map.test.ts b/test/export-map.test.ts index b8fb8fc..0dd267f 100644 --- a/test/export-map.test.ts +++ b/test/export-map.test.ts @@ -29,6 +29,11 @@ describe('export-map.json', () => { sanitize: 'security', trusted: 'security', prefersReducedMotion: 'motion', + // Added in bQuery 1.18. + createSchemaForm: 'forms', + StandardSchemaV1: 'forms', + validate: 'server', + EmptyStoreRecord: 'store', }); }); }); diff --git a/test/prefer-subpath-imports.test.ts b/test/prefer-subpath-imports.test.ts index c5e02d5..bf5f931 100644 --- a/test/prefer-subpath-imports.test.ts +++ b/test/prefer-subpath-imports.test.ts @@ -36,6 +36,26 @@ ruleTester.run('prefer-subpath-imports', rule, { output: `import { sanitize, trusted } from '@bquery/bquery/security';`, errors: [{ messageId: 'preferSubpath' }], }, + { + // Standard Schema forms, added to the root entry in bQuery 1.18. + code: `import { createSchemaForm, useSchemaForm, type SchemaFormValues } from '@bquery/bquery';`, + output: `import { createSchemaForm, useSchemaForm, type SchemaFormValues } from '@bquery/bquery/forms';`, + errors: [{ messageId: 'preferSubpath', data: { source: '@bquery/bquery/forms' } }], + }, + { + // One Standard Schema for client and server (bQuery 1.18). + code: `import { createSchemaForm, validate, type StandardSchemaV1 } from '@bquery/bquery';`, + output: [ + `import { createSchemaForm, type StandardSchemaV1 } from '@bquery/bquery/forms';`, + `import { validate } from '@bquery/bquery/server';`, + ].join('\n'), + errors: [ + { + messageId: 'preferSubpaths', + data: { sources: "'@bquery/bquery/forms', '@bquery/bquery/server'" }, + }, + ], + }, { // Comments survive a single-subpath fix. code: `import {