Skip to content

Change Log

October 2024

2024-10-30

  • Fixed: Instead of ouching middleware should call abortNavigation() to prevent navigation.
  • Moved error.vue to app/error.vue.
  • NOTE: If you customized error.vue you'll need to move it to app/error.vue.
  • On the client-side, replaced ouch() with the built in createError() function.
  • Added stack trace to error.vue.

2024-10-28

  • Switched jobs to use redis from a remote cluster.
  • Switched S3File bucket url from app.domain.com.s3.amazonaws.com to s3.amazonaws.com/app.domain.com. And the same for the thumbnail bucket.

2024-10-27

  • Added ego behavior to useVingRecord() and useVingKind() to allow disambiguation of multiple copies of the same record with different views.
  • VingRecord.propOptions() now returns validation options S3File relations in the form of acceptedFileExtensions.
  • VingRecord.describe().meta no longer includes the acceptedFileExtensions on S3File relations.
  • NOTE: If you are using record.meta.acceptedFileExtensions in your UI, you will need to change it to record.options.relationName instead. For example record.meta.acceptedFileExtensions.avatar would become record.options.avatar.

2024-10-25

  • Fix a bug in redis client where it wouldn't connect to the AWS valkey/redis cluster.
  • Fix a hydration mismatch in form inputs subtext.
  • Fix a hydration mismatch in markdown inputs.
  • Added error handling to verifyExtension() in S3File.
  • Added validation for acceptedFileExtensions in ving schemas being in the wrong place.
  • Make ioredis quit gracefully.
  • useVingKind().reset() is removed. Use .dispose() instead.

2024-10-24

  • Installed dotenv for environment variables.
  • Updated the redis client to use dotenv to get the connection string.
  • Updated the redis client to trap bad connection strings with an error message.
  • Updated the drizzle client to use dotenv to get the connection string.
  • Updated the drizzle client to trap bad connection strings with an error message.
  • Fixed a potential bug where someone enters a negative page number into the paginator.
  • Fixed a bug in the Pager component introduced with the upgrade to PrimeVue 4 where the default page was 0 rather than 1.
  • Updated the redis client to allow for cluster.
  • Installed keyv-anyredis for cache instead of @keyv/redis.
  • Updated cache to use which allows for cluster and allows us to reuse the existing redis client.
  • NOTE: You will need to run npm i to get the new modules.

2024-10-01

  • Added colin's patch for mysql pagination.
  • Disabled winston log rotation as it's not compatible with AWS Amplify.

September 2024

2024-09-06

  • Added documentation for PM2.

2024-09-01

  • Created process.json for PM2.

August 2024

2024-08-28

  • Added a note about TLS for Redis to the environment variables documentation.

2024-08-19

  • Started working on the web stack for CDK.
  • Updated the database stack to use the secrets manager for the database credentials.

2024-08-09

  • Started replacing Pulumi with CDK.
  • Added a CDK stack for uploads.
  • NOTE: Pulumi will be removed in a near future release. Do a pulumi down; pulumi destroy to remove the stacks, and then follow the CDK instructions to create recreate the stacks.
  • Added a CDK stack for the database and network.

2024-08-07

  • Switched to using hooks to copy ving.json to the build directory.

2024-08-05

  • Added redis to Pulumi prod.

2024-08-02

  • Added Pulumi prod.
  • Pulumi prod creates a VPC.
  • Pulumi prod creates a database cluster.

July 2024

2024-07-15

  • No longer dynamically loading files for ving records, job handlers, and ving.json as it was causing problems with the Nuxt build process.
  • NOTE: Any references you had to ving.useKind() will need to be updated to use useKind() instead, along with an import of it from #ving/record/utils.mjs.
  • Created map.mjs files for records, job handlers, and drizzle tables similar to the schema map. These will be updated automatically when you use the CLI generators.
  • NOTE: You will need to update the new map.mjs files to reflect any existing records, job handlers, or drizzle tables you have already created.

2024-07-08

  • Added CLI drizzle command to generate table definitions to the documentation.

2024-07-04

  • Added options param to ving schema props.
  • Fixed generating pathing for pages.
  • Added Cron Jobs subsystem.
  • NOTE: Run a database migration to add the new cronjob table.
  • Fixed: Can't have duplicate cron specs in redis. #175

2024-07-01

  • Added verifiedEmail field to the User CLI.
  • Fixed a problem with creating new users via the rest API.
  • Fixed: Unable to create Session using the API and following instructions in docs #173

June 2024

2024-06-25

  • Disabled nuxt devtools, because I never use them and they are spewing junk into the console.
  • Workaround: calling useVingKind().all() when doing an SSR without a middleware causes Nuxt to crash #168

2024-06-24

  • Fixed: pager appears to be broken #167
  • Rewrote the all method in useVingKind to be more clear and simple.
  • Fixed: itemsPerPage not respected on backend in useVingKind() #169
  • Fixed: fix pager component, doesn't currently switch pages #170

2024-06-23

  • Fixed: examples in VingSchema need to differentiate between the able and the kind class #155
  • Implemented: add manifest.json file #162

2024-06-21

  • Replaced PrimeFlex with Tailwind.
  • Replaced PrimeVue 3 with PrimeVue 4.
  • NOTE: All your UI stuff will need to be updated to work with Tailwind and PrimeVue 4.
  • Added DarkModeSelector component.
  • Added ving-theme.
  • Fixed: fix documentation for createAndVerify #164
  • Fixed: useKind is treating the cache as if its a class not an instance #165
  • Upgraded to Nuxt 3.12.
  • NOTE: npm i to get the new version of nuxt
  • Migrated to new Nuxt 4 folder structure.
  • NOTE: All of your pages, layouts, composables, components, utils, middleware, etc needs to move into the app folder.

2024-06-06

  • Fixed documentation for ving/utils/fs readJSON and writeJSON
  • Added an optional function that will be passed to an array filter to filter out any unwanted records from the current list of records on useVingKind() records list.
  • Added cron listing to ving jobs list.
  • ving jobs list auto-scales to fit terminal size.
  • Fixed: Help page type, missing "jobs" #160

2024-06-01

  • Documented noSetAll() attribute in Ving Schemas.

May 2024

2024-05-31

  • Don't do an update if no data has changed when the user calls update().
  • Fix enum2labels problem when options list is undefined.
  • Added placeholder option to FormInput when type is select so that it autogenerates a default undefined option with the placeholder.

2024-05-30

  • Fixed and if-else-if bug in FormInput component that was causing fields to be displayed twice if it was an int.
  • Fixed translation of ids in Ving Record filters.
  • Fixed translation of ints in Ving Record filters.
  • If determineDate() is passed an undefined value, it will return new Date().

2024-05-26

  • Implemented: @click should become @mousedown #154

2024-05-22

  • Fixed: leaking id in robot avatar #153
  • Fixed hydration mismatch on copy to clipboard button.

2024-05-14

  • Removed extraneous import from rest endpoint.
  • Added range() util.

2024-05-13

  • Changed stringified VingRecord IDs to prefix themselves with their Kind so that they can be easily disambiguated from each other out in the wild.
  • Added a rest endpoint that easily allows deleting of all children of a record.

2024-05-12

  • Fixed: file uploads are broken after id switch #151
  • NOTE: Thumbnails now use a different URL scheme than previously, and thus will be in broken locations. Since we're pre-production, just reupload any images you had.
  • Added schema prop validation to not allow the relation name to conflict with a prop name.
  • Send user id as an encrypted string over message bus.
  • VingRecord now adds an entry to the log every time it throws an error.
  • Fixed order of operations lookup on parent after setPostedProps.
  • Refined click area of ManageButton and PanelNav buttons.
  • Added VueUse composables for reactive access to browser subsystems like keyboard, mouse, localStorage, etc.
  • NOTE: Run "npm i" because we've added vueuse as a prereq.
  • Added Title tags to every page and the page generator.
  • NOTE: You should Title tags to your pages if you want titles.

2024-05-11

  • VingRecord id's are now integers for better database performance. They are translated to encrypted strings on the API for better security.
  • NOTE: You will likely want to recreate your database from scratch as all primary and foreign keys are changing from strings to integers, and doing a migration for that is going to be challenging.
  • NOTE: You should add a VING_SKIPJACK_KEY to your .env file that takes the format of between 1 and 10 random numbers separated by commas.
  • NOTE: You should run npm i as we've added skip32 as a new required module.
  • Fixed some email verification corner case problems.
  • Removed the findObject() utility as Array.prototype.find() essentially works the same way, and this forces better error handling.
  • Removed the token CLI command.
  • Added the id CLI command.

2024-05-06

  • Updated useVingRecord() to allow for extended actions.
  • Refactored useCurrentUser() to use useVingRecord()'s new extended actions feature.
  • Added some more docs to useVingRecord().

2024-05-05

  • Fix a bug in the new coerce() logic in FormInput.

2024-05-02

  • Moved the docs folder from ./docs to ./ving/docs to avoid collisions with downstream projects.
  • Created a utils folder for UI utility functions and moved enum2labels() into it since it was never a composable.
  • Renamed all composables to start with "use" per Nuxt convention.
  • Removed a bunch of extra markup by formatting form controls with their own default bottom margins.
  • NOTE: useDateTime() no longer exists, just use formatDate(), formatDateTime(), and formatTimeAgo() directly.
  • NOTE: restVersion() has been renamed to useRestVersion(), update your codebase appropriately.
  • NOTE: adminLinks() has been renamed to useAdminLinks(), update your codebase appropriately.
  • NOTE: useCurrentUserStore() has been renamed to useCurrentUser(), update your codebase appropriately.
  • NOTE: useNotifyStore() has been renamed to useNotify(), update your codebase appropriately.
  • NOTE: useSystemWideAlertStore() has been renamed to useSystemWideAlert(), update your codebase appropriately.
  • NOTE: useThrobberStore() has been renamed to useThrobber(), update your codebase appropriately.
  • NOTE: userSettingsButtons() has been renamed to useUserSettingsButtons(), update your codebase appropriately.
  • NOTE: userSettingsLinks() has been renamed to useUserSettingsLinks(), update your codebase appropriately.
  • Implemented: add "subtext" to FormInput #143
  • Implemented: add switch as a type to FormInput #145
  • Implemented: eliminate SelectInput in favor of Dropdown #142
  • NOTE: Eliminated the prepend/append slots on FormInput. Use spread operator instead.
  • NOTE: Eliminated SelectInput. Use Dropdown or FormInput type="select" instead.
  • Added prepend/append slots to FormInput for inserting icons into input groups.
  • Exposed new props for modifying the classes associated with PanelZone.
  • Added a coerce attribute to the FormInput component.
  • Added ving util appendNumberToString().

April 2024

2024-04-29

  • Implemented: reformat page generator to use panel components on view and edit #139

2024-04-28

  • Added zod based validation to PanelNav, ManageButton, Crumbtrail components.
  • Implemented: Track and update dirty columns only #132
  • Fixed a problem where updating an api key wasn't saving.
  • Implemented: change @change .update() to .save() #137
  • NOTE: Recommend updating your UI components to use .save('propname') instead of .update() on @change events to reduce wire traffic.
  • Eliminated p-fluid from all pages as it wasn't necessary and was causing weird button stretching.
  • NOTE: Delete p-fluid from all generated pages in your apps.
  • NOTE: AdminNav component has been removed. Replaced with useAdminLinks() composable.
  • Implemented: reformat admin to use panel components #138

2024-04-26

  • Removed all the client-only component tags as the hydration mismatches have been fixed.
  • Check to make sure a job handler exists before allowing a job to be created.
  • Implemented: CLI should let you search for jobs by handler name #125
  • Fixed a bug in job worker where it could not error properly from a job handler that didn't exist.
  • Fixed: enum should not have a length field in the schema validator #130
  • Implemented: in schema validator, disambiguate virtual columns #129
  • id type fields in ving schema no longer need a length.
  • Added validation for the length attribute on dbVarChar, dbText, and dbMediumText.
  • zodText() and zodMediumText() have become deprecated aliases for zodString().
  • Implemented: make default a required field in a prop definition #127
  • Fixed /api/v1/user/:id/s3files
  • Added ManageButton component.
  • Added link to user in user admin panel.
  • Removed all references to PrimeVue icons as they don't size well with the Iconify icons.
  • Replaced UserSettingsNav with PanelNav and useUserSettingsLinks() and useUserSettingsButtons().
  • Made the profile editing page mobile friendly.
  • Added PanelFrame component which dovetails nicely with PanelNav for building UIs.
  • Added PanelZone as a content area for PanelFrame.

2024-04-25

  • Fixed a bug where ving record fields of type 'int' were not being initialized properly.
  • Removed unnecessary validation on Dropzone.
  • Upgraded to Nuxt 3.11.2 from 3.10.0.
  • Merged VarChar, Text, and MediumText examples in docs into a String Examples section.
  • Renamed dbString to dbVarChar, but kept an alias as dbString.
  • Built ving schema validation system.
  • Fixed a bunch of bugs in the ving schema documentation.
  • Moved extensionMap from ving/record/records/S3File.mjs to ving/schema/schemas/S3File.mjs.
  • Upgraded from mysql2 3.3.4 to 3.9.7.
  • NOTE: run "npm i"

2024-04-24

  • Fixed a bug where an error when making calls on currentUserStore would destroy existing data.
  • Fixed a bug where you couldn't upload an avatar if you didn't already have one.
  • Added dxf to the known extension types.
  • Added a message for developers that they need to edit the extensionMap if they wish to support a new file type.
  • Updated the Dropzone component to use file extensions without a dot, the same way as S3File uses it internally.
  • NOTE: Any dropzones you have in use need to be updated to not use a dot in the array of file extensions.
  • Implemented: figure out a way to share file extensions for s3files from schema #104
  • NOTE: Because of the above you may want to check out the new acceptedFileExtensions attribute in ving schemas and migrate your S3File integrations to use it.
  • Implemented: add a display of an s3file thumbnail to the page generator #105
  • Fixed: pulumi doesn't create the nodmods.zip file as it should #110
  • Added job options for priority, repeat, and cron.
  • Added a job handler generator to the CLI.
  • Added CLI functions to obliterate, pause, and unpause queues.
  • Added CLI functions to list jobs in a queue and kill them.
  • Added uniqueQualifiers field to ving schema props to implement: allow unique indexes within set #114

2024-04-23

  • Created SelectInput component to replace FormSelect. However, you should use FormInput with type select instead of using this directly in most cases.
  • NOTE: The FormSelect component no longer exists. Anywhere you are using it use FormInput with type 'select' instead.
  • Added size prop to CopyToClipboard button.
  • Updated CopyToClipboard in generator to use size xs.
  • Added a little better documentation for Pulumi.
  • Fix: bio on User is required.
  • Implemented: replace axios with ofetch for CLI and jobs #117.
  • Implemented: replace lodash defaultsDeep with defu #118
  • NOTE: You will have to run npm i to get new modules.
  • Added ving/utils/indentify.mjs to help identify various data structures in a more consistent way.
  • Refactored entire code base to use ving/utils/indentify.mjs.
  • Implemented: replace Usage: with @example in jsdoc #121
  • Added more types to JSDoc.

2024-04-22

  • Added MarkdownInput form control component for editing markdown text.
  • Added MarkdownView component for viewing markdown text.
  • Integrated MarkdownInput into FormInput component so you can just set "type" equal to "markdown" and display the input.
  • Added a bio field to the User that can be edited in their profile settings and displayed on their profile page.
  • NOTE: Due to the above change you should regenerate your drizzle tables and run a migration.

2024-04-20

  • Fixed a bug where the rest generator would incorrectly generate child relationship api.
  • Added an empty layout.

2024-04-19

  • Fixed a problem where the default values set by a parent on child records wasn't being respected.
  • Update lambda file upload function to handle CSV files and other file types by returning the file size.
  • Update S3File Record to allow SVG file uploads and sets the iconf type for files that aren't bitmaps.
  • Make useVingRecord aware of extra state.
  • Fix count() on VingRecord.

2024-04-18

  • Cast result of sum() and avg() to number.

2024-04-12

  • Moved copy() from VingKind to VingRecord as its easier to use and less fragile.

2024-04-11

  • Made currentUserStore more fault tollerant.
  • Implemented: add required to FormSelect #95
  • Implemented: unify the use if [id] in urls #101
  • NOTE: Due to the above change, you should move [id].get.mjs, [id].put.mjs, and [id].delete.mjs in your server/api/v1/record folders to [id]/index.get.mjs, [id]/index.put.mjs, and [id]/index.delete.mjs.
  • Added filesystem utils.
  • Updated existing code to use filesystem utils.
  • Implemented: add warning when someone generates web or rest without a record #91
  • Implemented: user id in statistics and add clipboard copy #88
  • Fixed: documentation for Related Records is broken #86
  • Implemented: write docs for utils #89
  • Fixed: drizzle kit is now interactive #93
  • Fixed: cannot dispose useVingRecord on edit page #102
  • Added UserAvatar component.
  • Added min, max, sum, and avg methods to VingKind.

2024-04-10

  • Implemented: filterQualifier: true should be in the examples for all relation ids #96
  • Implemented: add documentation to ving schema about filterQuery #87
  • Added recordsAsOptions() method to the useVingKind() composable.
  • Fixed a bug in the create() method of useVingKind & useVingRecord where props passed in to the function would be overridden by the defaults.
  • Added prepend and append slots to FormSelect component.
  • Fix: int prop didn't generate number form field #92
  • Implemented: have page generator add an s3 drop zone if it detects an s3 relationship #100

2024-04-09

  • Fixed: no type int example in ving schema #82
  • Fixed: record delete generator not generating correctly #81
  • Fixed: if you misspell a schema when running record -w or record -r it should say no schema, not create an error #80
  • Added CopyToClipboard component.
  • Implemented: add clipboard button for copying an id to clipboard from view and edit pages #79
  • Fixed: displaying cache objects from CLI shows [object Object] instead of the actual object #78
  • Fixed: isRoleOrDie not documented correctly #77
  • Implemented: document Nuxt stuff #76
  • Implemented: add --bare as an option in generators that gets rid of the boiler plate #75
  • Implemented: cli improvements #83
  • Implemented: document the ving structure #84
  • Removed client-only wrapper from Datatables because the upgrade to PrimeVue 3.51.0 fixed the problem it was masking.

2024-04-08

  • Breaking change: Refactored VingRecord isOwner(), canEdit(), and propsOptions() to be async.
  • Added skipOwnerCheck as a ving schema prop relation option.
  • Added a whole new section to the Ving Schema documentation defining all the fields that go into ving schema props.
  • Added UserProfileLink component.
  • Automatically link id/name in generated index pages.
  • Update page generator to mark enum options as optional.

2024-04-07

  • Made the MenuBar in the default layout client only until PrimeVue fixes #5541.
  • useVingKind().mint() now carries forward the query params into the new record.
  • Updated zodString(), zodText(), and zodMediumText() schema helper to allow for 0 length strings.
  • Fixed useVingKind() not settings propsOptions.
  • Added enum2label() composable.

2024-04-06

  • Added VING_SITE_URL to install instructions.
  • Fixed API generator missing a slash.
  • Fixed API options cassing problem.
  • Upgraded to PrimeVue 3.51.0 from 3.47.2.
  • Fixed undefined session in delete api.
  • Fixed record page generator capitalization.

2024-04-05

  • Changed the way foreign keys are generated due to the possibility of creating keynames that were too long.
  • Added a migration status to the drizzle CLI.

2024-04-04

  • Provided a little more documentation about virtual columns
  • Fixed camelCasing of schema names in the schema generator
  • Added mediumtext fields to schema and drizzle generation

March 2024

2024-03-16

  • Created a function for fetching ving config in ving/config.mjs
  • Added a Rest versioning system for API breakages

2024-03-15

  • Added pseudo props to Records so that in addition to user.set('admin', true) you can also do user.admin = true for both setters and getters.

2024-03-12

  • Fixed a security bug where passwords created via the CLI were stored incorrectly.