diff --git a/package.json b/package.json index db36a0b..99cb4d5 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,7 @@ "@glint/template": "^1.5.2", "@rollup/plugin-babel": "^6.0.4", "@tsconfig/ember": "^3.0.8", + "@types/rsvp": "^4.0.9", "babel-plugin-ember-template-compilation": "^2.2.5", "concurrently": "^9.0.1", "decorator-transforms": "^2.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4cd00f0..4443a8f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,6 +66,9 @@ importers: '@tsconfig/ember': specifier: ^3.0.8 version: 3.0.10 + '@types/rsvp': + specifier: ^4.0.9 + version: 4.0.9 babel-plugin-ember-template-compilation: specifier: ^2.2.5 version: 2.3.0 diff --git a/rollup.config.mjs b/rollup.config.mjs index 2ed031a..61eaae1 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -48,9 +48,8 @@ export default { // Ensure that .gjs files are properly integrated as Javascript addon.gjs(), - // @todo convert addon to TypeScript - // // Emit .d.ts declaration files - // addon.declarations('declarations'), + // Emit .d.ts declaration files + addon.declarations('declarations'), // addons are allowed to contain imports of .css files, which we want rollup // to leave alone and keep in the published output. diff --git a/src/index.js b/src/index.js deleted file mode 100644 index b5d083d..0000000 --- a/src/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { lookupValidator as default } from 'validated-changeset'; -export { setMessages } from './utils/messages.js'; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..05f6033 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,4 @@ +export { lookupValidator as default } from 'validated-changeset'; +export { setMessages } from './utils/messages.ts'; + +export type { ValidatorMapFunc } from 'validated-changeset/types'; diff --git a/src/utils/handle-multiple-validations.js b/src/utils/handle-multiple-validations.ts similarity index 100% rename from src/utils/handle-multiple-validations.js rename to src/utils/handle-multiple-validations.ts diff --git a/src/utils/messages.js b/src/utils/messages.ts similarity index 84% rename from src/utils/messages.js rename to src/utils/messages.ts index 3239a26..845d0b5 100644 --- a/src/utils/messages.js +++ b/src/utils/messages.ts @@ -1,8 +1,10 @@ import _Messages from 'ember-validators/messages'; import { capitalize, dasherize } from '@ember/string'; -let cachedRef; -let customMessages; +type IMessages = Record; + +let cachedRef: IMessages | undefined; +let customMessages: IMessages | undefined; export const defaultMessages = Object.assign({}, _Messages, { // Blank and present are flipped in ember-validators. Need to flip them back here @@ -39,17 +41,17 @@ export const defaultMessages = Object.assign({}, _Messages, { * * @return {Object} */ -export function getMessages() { +export function getMessages(): object { if (cachedRef) { return cachedRef; } cachedRef = Object.assign({}, defaultMessages, customMessages); - return cachedRef; + return cachedRef as IMessages; } -export function setMessages(messages) { +export function setMessages(messages: IMessages) { customMessages = messages; cachedRef = undefined; } diff --git a/src/utils/to-date.js b/src/utils/to-date.ts similarity index 89% rename from src/utils/to-date.js rename to src/utils/to-date.ts index 6e9ea9d..91d604b 100644 --- a/src/utils/to-date.js +++ b/src/utils/to-date.ts @@ -4,7 +4,9 @@ * @returns {Date} the parsed date in the local time zone * @throws {TypeError} 1 argument required */ -export default function toDate(argument) { +export default function toDate( + argument: Date | number | string | (() => Date | number), +): Date { const argStr = Object.prototype.toString.call(argument); if (typeof argument === 'function') { diff --git a/src/utils/validation-errors.js b/src/utils/validation-errors.ts similarity index 87% rename from src/utils/validation-errors.js rename to src/utils/validation-errors.ts index 84cc5ac..2b769a4 100644 --- a/src/utils/validation-errors.js +++ b/src/utils/validation-errors.ts @@ -7,10 +7,16 @@ import { get } from '@ember/object'; import { assert } from '@ember/debug'; import { getOwnConfig } from '@embroider/macros'; -import { getMessages } from './messages.js'; +import { getMessages } from './messages.ts'; + +type IOwnConfig = + | undefined + | { + rawOutput: boolean; + }; export default function buildMessage(key, result) { - let returnsRaw = getOwnConfig()?.rawOutput || false; + let returnsRaw = getOwnConfig()?.rawOutput || false; let messages = getMessages(); let description = messages.getDescriptionFor(key); diff --git a/src/utils/with-defaults.js b/src/utils/with-defaults.ts similarity index 100% rename from src/utils/with-defaults.js rename to src/utils/with-defaults.ts diff --git a/src/utils/wrap.js b/src/utils/wrap.ts similarity index 100% rename from src/utils/wrap.js rename to src/utils/wrap.ts diff --git a/src/validators/confirmation.js b/src/validators/confirmation.ts similarity index 91% rename from src/validators/confirmation.js rename to src/validators/confirmation.ts index 261cd81..a2cdd44 100644 --- a/src/validators/confirmation.js +++ b/src/validators/confirmation.ts @@ -1,4 +1,4 @@ -import buildMessage from '../utils/validation-errors.js'; +import buildMessage from '../utils/validation-errors.ts'; import evValidateConfirmation from 'ember-validators/confirmation'; export default function validateConfirmation(options = {}) { diff --git a/src/validators/date.js b/src/validators/date.ts similarity index 92% rename from src/validators/date.js rename to src/validators/date.ts index af1ae90..854d80b 100644 --- a/src/validators/date.js +++ b/src/validators/date.ts @@ -1,6 +1,6 @@ -import buildMessage from '../utils/validation-errors.js'; -import withDefaults from '../utils/with-defaults.js'; -import toDate from '../utils/to-date.js'; +import buildMessage from '../utils/validation-errors.ts'; +import withDefaults from '../utils/with-defaults.ts'; +import toDate from '../utils/to-date.ts'; const errorFormat = 'MMM Do, YYYY'; diff --git a/src/validators/exclusion.js b/src/validators/exclusion.ts similarity index 85% rename from src/validators/exclusion.js rename to src/validators/exclusion.ts index fc27a65..886257c 100644 --- a/src/validators/exclusion.js +++ b/src/validators/exclusion.ts @@ -1,4 +1,4 @@ -import buildMessage from '../utils/validation-errors.js'; +import buildMessage from '../utils/validation-errors.ts'; import evValidateExclusion from 'ember-validators/exclusion'; export default function validateExclusion(options = {}) { diff --git a/src/validators/format.js b/src/validators/format.ts similarity index 87% rename from src/validators/format.js rename to src/validators/format.ts index 5f442a5..928feee 100644 --- a/src/validators/format.js +++ b/src/validators/format.ts @@ -1,5 +1,5 @@ import { isEmpty } from '@ember/utils'; -import buildMessage from '../utils/validation-errors.js'; +import buildMessage from '../utils/validation-errors.ts'; import evValidateFormat from 'ember-validators/format'; export default function validateFormat(options = {}) { diff --git a/src/validators/inclusion.js b/src/validators/inclusion.ts similarity index 85% rename from src/validators/inclusion.js rename to src/validators/inclusion.ts index ca3f46d..c02d664 100644 --- a/src/validators/inclusion.js +++ b/src/validators/inclusion.ts @@ -1,4 +1,4 @@ -import buildMessage from '../utils/validation-errors.js'; +import buildMessage from '../utils/validation-errors.ts'; import evValidateInclusion from 'ember-validators/inclusion'; export default function validateInclusion(options = {}) { diff --git a/src/validators/index.js b/src/validators/index.js deleted file mode 100644 index 71a6b39..0000000 --- a/src/validators/index.js +++ /dev/null @@ -1,8 +0,0 @@ -export { default as validateDate } from './date.js'; -export { default as validatePresence } from './presence.js'; -export { default as validateLength } from './length.js'; -export { default as validateNumber } from './number.js'; -export { default as validateFormat } from './format.js'; -export { default as validateInclusion } from './inclusion.js'; -export { default as validateExclusion } from './exclusion.js'; -export { default as validateConfirmation } from './confirmation.js'; diff --git a/src/validators/index.ts b/src/validators/index.ts new file mode 100644 index 0000000..a1adfd4 --- /dev/null +++ b/src/validators/index.ts @@ -0,0 +1,8 @@ +export { default as validateDate } from './date.ts'; +export { default as validatePresence } from './presence.ts'; +export { default as validateLength } from './length.ts'; +export { default as validateNumber } from './number.ts'; +export { default as validateFormat } from './format.ts'; +export { default as validateInclusion } from './inclusion.ts'; +export { default as validateExclusion } from './exclusion.ts'; +export { default as validateConfirmation } from './confirmation.ts'; diff --git a/src/validators/length.js b/src/validators/length.ts similarity index 75% rename from src/validators/length.js rename to src/validators/length.ts index a5ebc5f..9ecaf3b 100644 --- a/src/validators/length.js +++ b/src/validators/length.ts @@ -1,5 +1,5 @@ -import buildMessage from '../utils/validation-errors.js'; -import withDefaults from '../utils/with-defaults.js'; +import buildMessage from '../utils/validation-errors.ts'; +import withDefaults from '../utils/with-defaults.ts'; import evValidateLength from 'ember-validators/length'; export default function validateLength(options = {}) { diff --git a/src/validators/number.js b/src/validators/number.ts similarity index 78% rename from src/validators/number.js rename to src/validators/number.ts index b7ecafa..6807bcd 100644 --- a/src/validators/number.js +++ b/src/validators/number.ts @@ -1,5 +1,5 @@ -import buildMessage from '../utils/validation-errors.js'; -import withDefaults from '../utils/with-defaults.js'; +import buildMessage from '../utils/validation-errors.ts'; +import withDefaults from '../utils/with-defaults.ts'; import evValidateNumber from 'ember-validators/number'; export default function validateNumber(options = {}) { diff --git a/src/validators/presence.js b/src/validators/presence.ts similarity index 95% rename from src/validators/presence.js rename to src/validators/presence.ts index 0d9eadb..e53a623 100644 --- a/src/validators/presence.js +++ b/src/validators/presence.ts @@ -1,4 +1,4 @@ -import buildMessage from '../utils/validation-errors.js'; +import buildMessage from '../utils/validation-errors.ts'; import evValidatePresence from 'ember-validators/presence'; import { get } from '@ember/object';