Skip to content
This repository has been archived by the owner on Aug 28, 2020. It is now read-only.

The Return of the SettingsGateway Rewrite #691

Closed
wants to merge 154 commits into from
Closed

The Return of the SettingsGateway Rewrite #691

wants to merge 154 commits into from

Conversation

kyranet
Copy link
Contributor

@kyranet kyranet commented May 15, 2019

Description of the PR

Fixes #425.

Changes Proposed in this Pull Request (List new items in CHANGELOG.MD)

Added:

  • [#525] Add GatewayStorage#sync so they can be registered. (kyranet)
  • [#487] Added Settings#resolve(...paths) (UnseenFaith)
  • [#477] Added core KlasaClient#settingsDelete event handler to destroy instances in other shards. (kyranet)
  • [#475] Added KlasaClient#settingsSync event. (kyranet)
  • [#471] Added Gateway#create and Gateway#acquire. (kyranet)
  • [#471] Added SETTING_GATEWAY_CHOOSE_KEY and SETTING_GATEWAY_UNCONFIGURABLE_FOLDER i18n keys into en-US. (kyranet)
  • [#471] Added SettingsFolder, with the common operations (update, reset...) for better OOP compliancy. (kyranet)
  • [#426] Added Schema#configurableValues, similar to Schema#configurableKeys. (kyranet)
  • [#426] Added SettingsUpdateOptions.rejectOnError to make Settings#update reject when any of the keys are invalid or the parse turns out wrong. (kyranet)

Changed:

  • [#828] Moved all SettingsGateway related options into a namespaced settings option. (UnseenFaith)
  • [#814] Changed Settings#get to always deep clone values. (UnseenFaith)
  • [#807] Changed Language#get's generic types to include an array of function values. (Favna)
  • [#698] Rewritten SettingsGateway's guides. (UnseenFaith)
  • [#700] Changed the API for SettingsFolder#{pluck,resolve} to return arrays instead of objects. (Skillz4Killz)
  • [#814] deepClone objects and arrays in Settings#get(). (Faith)
  • [#545] Changed the entire API for QueryBuilder to extend a Map instead of being a pseudo-map. (kyranet)
  • [#480] Changed the entire mechanism for GatewayDriver#register to take a GatewayStorage instance. (kyranet)
  • [#475] Renamed KlasaClient#{settingsUpdateEntry,settingsDeleteEntry,settingsCreateEntry} to KlasaClient#{settingsUpdate,settingsDelete,settingsCreate}. (kyranet)
  • [#471] Modified Schema#defaults type from Object literal to a SettingsFolder instance. (kyranet)
  • [#471] Modified Schema#defaults to be a property instead of a getter. (kyranet)
  • [#471] Modified Gateway#get to take only id. For get or create, use Gateway#acquire instead. (kyranet)
  • [#471] Modified Settings#{update,reset} output to return { key: string, value: any, piece: Schema | SchemaPiece } instead of { data: string, any], piece: Schema | SchemaPiece } in the updated field. (kyranet)
  • [#471] Modified Settings completely, they're not longer dictionaries but (nested) SettingsFolders. (kyranet)
  • [#471] Modified Util.resolveGuild to also resolve members. (kyranet)
  • [#471] Modified initialization order to prepare Schedule before initializing pieces. (kyranet)
  • [#471] Modified Schema#get overload to not check safely to reduce overhead. (kyranet)
  • [#471] Modified Settings#sync to force sync if the entry was not synchronized. (kyranet)
  • [#471] Renamed Gateway#syncQueue to Gateway#syncMap, changing also its type from Collection<string, Promise<Settings>> to WeakMap<string,- Promise<Settings>>. (kyranet)
  • [#471] Renamed GatewayDriver#type to GatewayDriver#name. (kyranet)
  • [#471] Renamed SettingsUpdateOptions.{action,arrayPosition,avoidUnconfigurable} to SettingsUpdateOptions.{arrayAction,arrayIndex,onlyConfigurable}. (kyranet)
  • [#426] Made schema resolving much faster and reliable. (kyranet)
  • [#426] [BREAKING] Settings#{list,resolveString} -> Settings#display. (kyranet)
  • [#426] Tweaked conf and userconf commands to use restString for values. (kyranet)
  • [#426] Guild Settings will not longer need guild. (kyranet)
  • [#426] [BREAKING] Moved the guild parameter in Settings#update to SettingsUpdateOptions. (kyranet)
  • [#467] [BREAKING] Changed GatewayDriver to extend Collection<string, Gateway> as opposed to being a dictionary type. (kyranet)

Removed:

  • [#480] Removed Gateway#store. (kyranet)
  • [#471] Removed Gateway#defaults. Refer to Schema#defaults instead. (kyranet)
  • [#426] Removed Gateway#getPath. They're now resolved inside Settings. (kyranet)

Fixed:

  • [#823] Fixed KlasaUser#toJSON. (PyroTechniac)
  • [#819] Fixed return type of Store.walk. (PyroTechniac)
  • [#818] Fixed userconf command using the guilds gateway instead of the users one. (UnseenFaith)
  • [#817] Fixed sharding broadcast evals. (UnseenFaith)
  • [#487] Fixed role deserializer. (UnseenFaith)
  • [#426] Fixed typings for QueryBuilder. (kyranet)

Semver Classification

  • This PR only includes documentation or non-code changes.
  • This PR fixes a bug and does not change the (intended) framework interface.
  • This PR adds methods or properties to the framework interface.
  • This PR removes or renames methods or properties in the framework interface.

kyranet and others added 30 commits April 17, 2019 22:57
)

* refactor: Convert GatewayDriver into a Collection<string, Gateway>

* fix: Better error message for gateway existence in register

Co-Authored-By: kyranet <kyradiscord@gmail.com>
* refactor: No more _update

* cleanup: More re-organization

* src: More refactors

* Settings#{list,resolveString} -> Settings#display

* style: Rename constant name

* refactor: Re-add Conf#check and reduce duplicated code in Settings#reset

* fix: _resolveUpdateOverloads not parsing reset args correctly

* fix: Synchronize the Settings entry on update or reset instead of returning wrong results

* typings: Fixed QB types and updated everything

* docs: Added missing jsdocs and refactored Settings#get

* fix: conf and userconf always throwing on empty values

* fix: Better Schema#get

* fix: Settings#show using Map[key] instead of Map#get(key)

* fix: Settings#_resolveUpdateOverloads not checking for the lack of a key

* fix: conf command not passing all args for check

* fix: Fixed multiple things

* docs: Update guides to reflect latest changes

* pr: Update changelog
Now it's the time when I run and hide for such a silly mistake.
* wip: Settings rewrite

* design: Chain SettingsFolder#get instead of recursing, remove '*' wildcard

* refactor: Made SettingsFolder#get use Array#reduce

* src: Add Settings#init

* src: Added SettingsFolder#display

* src: Remove Settings and all traces of it

* src: Update Gateway, move SettingsFolder#existenceStatus to Settings

* docs: Documented all methods and properties of Settings and SettingsFolder

* naming: Gateway#type -> Gateway#name

* src: Change all occurrences of Settings[key] to Settings.get(key)

* src: SettingsUpdateOptions#{action|avoidUnconfigurable} -> {arrayAction|onlyConfigurable}

* src: guildSettings[key] -> guildSettings.get(key)

* typings: GatewayStorage#type -> GatewayStorage#name

* refactor: Faster Schema#get

* typings: Fix Settings class typings

* typings: Iterable -> IterableIterator

* docs: Fixed util docs

* fix: Use Map#call instead of inherited SettingsFolder#get and Schema

* fix: Settings#init deepCloning the wrong value

* fix: KlasaGuild#language using Settings[key] instead of Settings.get(key)

* inspection: Make Settings#{id|base} non-enumerable

* fix: Sandbox Schema#get to mimic previous functionality

* fix: Better errors for Settings#{reset,update}

* fix: Fixed SettingsFolder#display

* docs: Added comments to justify the usage of Map.prototype.get.call

* fix: SettingsFolder#display not getting the right path

* fix: Revert change to commandHandler's mention only check

* docs: Justify the prefix.length in commandHandler's mentionOnly

* feat: SettingsFolder#pluck

* fix: Updated providers helpers for the new Gateway results

* fix: SettingsFolder#update not overloading well

* fix: Settings and SettingsFolder trying to access client

* fix: Fixed updating not patching correctly

* fix: settingsUpdateEntry event receiving a SettingsFolder instead of the Settings instance

* src: Better relative path parsing, fixed update inserting full values into db

* fix: JSON provider not parsing create queries

* fix: Configuration commands not checking correctly

* src: Added Settings#target, Gateway#{create,acquire}, removed create in get

* fix: Init schedule before pieces (but after SG)

* i18n,fix: Default guild option in Settings#{update,reset}, i18n all errors

* refactor: Better guild resolving for Settings#{reset,update}

* fix: resolveGuild calls without client

* fix: SQLProvider accessing to the gateway wrongly

* changelog: Updated for the PR

* fix: Settings#clone not working as expected

* misc: Make Settings#{id,gateway,target} enumerable

* revert: Settings#{gateway,target} enumerability

* cleanup: Remove GatewayStorage#defaults

* misc: Make Schema#defaults a property

* fix: Call this.init() in destroy instead of patching

* docs: Updated changelog

* lint: Fixed lint

* docs: Fixed jsdocs

* src: Reorganize files

* style: Remove optional property in Settings#id

* memory: Deepclone patch, not init

* fix: Access to undefined

* fix: Settings#update not serializing arrays correctly

* src: Remove all usage of deepClone in SettingsGateway

* misc: Make Schema#defaults a SettingsFolder instance

* docs: Finished changelog

* misc: Remove guild option from the conf command

* docs: Forgot to mention arrayPosition->arrayIndex in CHANGELOG

* perf: Optimize Gateway#sync to the clouds for empty schemas
* feat: Added `KlasaClient#settingsSyncEntry` event.

* docs: Correct PR number in CHANGELOG

* src: Emit settingsSyncEntry on broadcastEval

* fix: Entry settings not setting their existence status to true in shards

* misc: Renamed `KlasaClient#{settingsUpdateEntry,settingsDeleteEntry,settingsCreateEntry}` to `KlasaClient#{settingsUpdate,settingsDelete,settingsCreate}`.

* misc: Rename prefix settingsUpdate core event to... coreSettingsUpdate

* fix: coreSettingsUpdate is not an once event
* fix: Added core event handler for settingsDelete

* docs: Updated IncludedEvents

* docs: Correct changelog PR number

* fix: Don't check this.client.shard in both core settings event handlers

* misc: Add IS support for both core settings events handlers

* misc: Much better and faster shard check for both settings events
* refactor: Convert GatewayDriver into a Collection<string, Gateway> (#467)

* refactor: Convert GatewayDriver into a Collection<string, Gateway>

* fix: Better error message for gateway existence in register

Co-Authored-By: kyranet <kyradiscord@gmail.com>

* refactor: Upgrade API for Settings#update (#426)

* refactor: No more _update

* cleanup: More re-organization

* src: More refactors

* Settings#{list,resolveString} -> Settings#display

* style: Rename constant name

* refactor: Re-add Conf#check and reduce duplicated code in Settings#reset

* fix: _resolveUpdateOverloads not parsing reset args correctly

* fix: Synchronize the Settings entry on update or reset instead of returning wrong results

* typings: Fixed QB types and updated everything

* docs: Added missing jsdocs and refactored Settings#get

* fix: conf and userconf always throwing on empty values

* fix: Better Schema#get

* fix: Settings#show using Map[key] instead of Map#get(key)

* fix: Settings#_resolveUpdateOverloads not checking for the lack of a key

* fix: conf command not passing all args for check

* fix: Fixed multiple things

* docs: Update guides to reflect latest changes

* pr: Update changelog

* fix: Collection not being destructured from discord.js

Now it's the time when I run and hide for such a silly mistake.

* Settings rewrite (#471)

* wip: Settings rewrite

* design: Chain SettingsFolder#get instead of recursing, remove '*' wildcard

* refactor: Made SettingsFolder#get use Array#reduce

* src: Add Settings#init

* src: Added SettingsFolder#display

* src: Remove Settings and all traces of it

* src: Update Gateway, move SettingsFolder#existenceStatus to Settings

* docs: Documented all methods and properties of Settings and SettingsFolder

* naming: Gateway#type -> Gateway#name

* src: Change all occurrences of Settings[key] to Settings.get(key)

* src: SettingsUpdateOptions#{action|avoidUnconfigurable} -> {arrayAction|onlyConfigurable}

* src: guildSettings[key] -> guildSettings.get(key)

* typings: GatewayStorage#type -> GatewayStorage#name

* refactor: Faster Schema#get

* typings: Fix Settings class typings

* typings: Iterable -> IterableIterator

* docs: Fixed util docs

* fix: Use Map#call instead of inherited SettingsFolder#get and Schema

* fix: Settings#init deepCloning the wrong value

* fix: KlasaGuild#language using Settings[key] instead of Settings.get(key)

* inspection: Make Settings#{id|base} non-enumerable

* fix: Sandbox Schema#get to mimic previous functionality

* fix: Better errors for Settings#{reset,update}

* fix: Fixed SettingsFolder#display

* docs: Added comments to justify the usage of Map.prototype.get.call

* fix: SettingsFolder#display not getting the right path

* fix: Revert change to commandHandler's mention only check

* docs: Justify the prefix.length in commandHandler's mentionOnly

* feat: SettingsFolder#pluck

* fix: Updated providers helpers for the new Gateway results

* fix: SettingsFolder#update not overloading well

* fix: Settings and SettingsFolder trying to access client

* fix: Fixed updating not patching correctly

* fix: settingsUpdateEntry event receiving a SettingsFolder instead of the Settings instance

* src: Better relative path parsing, fixed update inserting full values into db

* fix: JSON provider not parsing create queries

* fix: Configuration commands not checking correctly

* src: Added Settings#target, Gateway#{create,acquire}, removed create in get

* fix: Init schedule before pieces (but after SG)

* i18n,fix: Default guild option in Settings#{update,reset}, i18n all errors

* refactor: Better guild resolving for Settings#{reset,update}

* fix: resolveGuild calls without client

* fix: SQLProvider accessing to the gateway wrongly

* changelog: Updated for the PR

* fix: Settings#clone not working as expected

* misc: Make Settings#{id,gateway,target} enumerable

* revert: Settings#{gateway,target} enumerability

* cleanup: Remove GatewayStorage#defaults

* misc: Make Schema#defaults a property

* fix: Call this.init() in destroy instead of patching

* docs: Updated changelog

* lint: Fixed lint

* docs: Fixed jsdocs

* src: Reorganize files

* style: Remove optional property in Settings#id

* memory: Deepclone patch, not init

* fix: Access to undefined

* fix: Settings#update not serializing arrays correctly

* src: Remove all usage of deepClone in SettingsGateway

* misc: Make Schema#defaults a SettingsFolder instance

* docs: Finished changelog

* misc: Remove guild option from the conf command

* docs: Forgot to mention arrayPosition->arrayIndex in CHANGELOG

* perf: Optimize Gateway#sync to the clouds for empty schemas

* feat: Added `KlasaClient#settingsSync` event. (#475)

* feat: Added `KlasaClient#settingsSyncEntry` event.

* docs: Correct PR number in CHANGELOG

* src: Emit settingsSyncEntry on broadcastEval

* fix: Entry settings not setting their existence status to true in shards

* misc: Renamed `KlasaClient#{settingsUpdateEntry,settingsDeleteEntry,settingsCreateEntry}` to `KlasaClient#{settingsUpdate,settingsDelete,settingsCreate}`.

* misc: Rename prefix settingsUpdate core event to... coreSettingsUpdate

* fix: coreSettingsUpdate is not an once event

* fix: Old typings, patch before emitting events

* fix: Settings delete core event (#477)

* fix: Added core event handler for settingsDelete

* docs: Updated IncludedEvents

* docs: Correct changelog PR number

* fix: Don't check this.client.shard in both core settings event handlers

* misc: Add IS support for both core settings events handlers

* misc: Much better and faster shard check for both settings events

* src: GatewayDriver#register changes

* fix: I missed this

* misc: Requested changes

* src: Requested change

* fix: Who did this

* fix: settings is not defined in the evals
* feat: resolve helper

* feat: fully working resolve method

* docs: changelog

* fix: doc block spacing

* fix: language of null

Co-Authored-By: UnseenFaith <tba28012@hotmail.com>

* fix: relative pathing vs absolute

Co-Authored-By: UnseenFaith <tba28012@hotmail.com>

* fix: change to more cpu/gpu friendly method

* typings: Updated for ece217f

* fix: arrays setting entire keys to null instead of the index
also all deserialize funcs are async for consistency

* docs: add typedef for resolve
* cleanup: move code to a more appropriate place

* fix: client not this

* fix: option is plural not singular

* docs: these don't belong here...
remove is effectively made useless because you have to add every key using .add() now, to remove just remove the .add() call
* src: make piece serializer better and add aliases

* src: fix build

* Update src/languages/en-US.js

Co-Authored-By: UnseenFaith <tba28012@hotmail.com>
* src: Rename SchemaPiece to SchemaEntry and all occurrences

* consistency: More requested changes

* doc: Fix typedef in UnderstandingSchemaEntries.md

* doc: Fixed SchemaEntryOptions's typedef
* feat: Add GatewayStorage#sync so they can be registered.

* src: change gatewaystorage to be consistent

* fix: one more occurence of providerName

* fix: build

* typings: Updated for latest commit, added GatewayOptions typedef

* fix: GatewayStorage options argument not defaulting

* doc: GatewayStorage#_private should be marked as private
* src: Rewrite QueryBuilder to be a Map

* doc: Updated CreatingSQLProviders

* fix: SQLProvider#_parseGatewayInput

* misc: QueryBuilder#parseDefault -> generateDatatype

* misc: Rename resolvers to serializers

* src: Added QB#debug(), QueryBuilderDatatype.aliasOf, and SQLProvider#validateQueryBuilder

* fix: Object.create's properties are not enumerable, object spread fails here

* fix: Use Object.assign instead of mergeDefault when a datatype exists

* misc: Rename QueryBuilderDatatype.aliasOf to extends to match actual behaviour

* misc: Remove QueryBuilder#add's string overload for type

* typings: Bugfixes

* typings: Fix KlasaClientOptions, added support for strict TS

* typings: Fix SchemaFolderOptions interface

* fix: Whoops

* fix: GatewayStorage throwing the wrong provider name

* lint: Added missing semicolon

* typings: Fixed some definitions for strict mode

* src: Added more QB default types, fixed some of them, added number

* typings: Add overloads for Schema

* fix: Do not stringify null
kyranet and others added 25 commits September 18, 2019 22:29
* Fix patch and sharding related bugs

* delete should also emit sync to send defaults back

* fix destroy not setting existenceStatus to false
* throwOnError option

* better checks

* docs

* create namespace for settings

* fix spacing?

* typings: Updated to latest commit
* typings: Fixed typings for Provider and SQLProvider

* typings: Fixed indentation for the regions
* refactor: Use RequestHandler to handle synchronization

* chore: Update `@klasa/request-handler` to `0.0.2`

* fix: Re-implement Gateway{Storage}#sync

* docs: Fixed wrong element in README

* chore: Update `@klasa/request-handler` to `0.0.3`

* fix: Resolved synchronization issues in Settings
Base automatically changed from v1.0.0-alpha to master May 22, 2020 21:43
Co-Authored-By: Gryffon Bellish <owenbellish@gmail.com>
@kyranet kyranet removed this from In Progress in v1.0.0 RoadMap May 25, 2020
@bdistin
Copy link
Contributor

bdistin commented May 26, 2020

this has been done with the latest master rewrite, closing this PR, but keeping the branch around until we are sure we can depend on the klasa 0.6.0+

@bdistin bdistin closed this May 26, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Meta: Refactor Issues and PRs related to refactors. Mod: SettingsGateway Issues and PRs related to SettingsGateway. SEM: Major PRs that contain breaking changes and should be released in the next major version. Type: Caching Issues and PRs related to caching. Type: Enhancement Issues and PRs related to feature enhancement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Settings: Breaking Changes