From eb920083547567e9531016b6012840e340251c6f Mon Sep 17 00:00:00 2001 From: Alan Rodas Bonjour Date: Thu, 28 Dec 2023 19:24:10 -0300 Subject: [PATCH] build: update build configuration to scripts 0.6.x By updating the gobstones-scripts version, now the docs should be automatically built with the triggered workflow. fix #27 --- .github/workflows/on-tag-publish-docs.yml | 43 + .gitignore | 36 +- .husky/commit-msg | 34 +- .husky/pre-commit | 51 +- .husky/pre-push | 72 +- .husky/prepare-commit-msg | 82 +- docs/.nojekyll | 1 - docs/assets/highlight.css | 134 -- docs/assets/main.js | 59 - docs/assets/navigation.js | 1 - docs/assets/search.js | 1 - docs/assets/style.css | 1394 ----------------- docs/classes/Events.EventEmitter.html | 86 - docs/classes/Expectations.Expectation.html | 114 -- .../Expectations.FinishedExpectation.html | 20 - .../Expectations.JoinedExpectation.html | 28 - docs/classes/Expectations.Matchers.html | 84 - docs/classes/GobstonesLang.Board.html | 460 ------ docs/classes/GobstonesLang.BoardError.html | 8 - docs/classes/GobstonesLang.Cell.html | 270 ---- docs/classes/GobstonesLang.Color.html | 101 -- docs/classes/GobstonesLang.Direction.html | 136 -- ...GobstonesLang.InvalidBoardDescription.html | 13 - .../GobstonesLang.InvalidCellReading.html | 11 - .../GobstonesLang.InvalidSizeChange.html | 17 - .../GobstonesLang.InvalidStonesAmount.html | 15 - ...bstonesLang.LocationFallsOutsideBoard.html | 13 - .../SourceReader.DefinedSourcePosition.html | 157 -- .../SourceReader.DocumentSourcePosition.html | 210 --- ...rceReader.EndOfDocumentSourcePosition.html | 160 -- ...SourceReader.EndOfInputSourcePosition.html | 144 -- .../SourceReader.ErrorAtEndOfDocumentBy.html | 7 - .../SourceReader.ErrorAtEndOfInputBy.html | 7 - docs/classes/SourceReader.ErrorNoInput.html | 5 - ...urceReader.ErrorUnmatchingPositionsBy.html | 9 - .../SourceReader.KnownSourcePosition.html | 221 --- docs/classes/SourceReader.SourcePosition.html | 43 - docs/classes/SourceReader.SourceReader.html | 327 ---- .../SourceReader.SourceReaderError.html | 13 - .../SourceReader.SourceReaderErrorBy.html | 9 - .../SourceReader.UnknownSourcePosition.html | 25 - docs/classes/Translator.Translator.html | 63 - docs/classes/Types.BiMap.html | 119 -- docs/classes/cli.CLIApp.html | 88 -- docs/classes/cli.CLICommandBuilder.html | 80 - docs/docs/globals.html | 25 - docs/favicon.ico | Bin 41893 -> 0 bytes docs/functions/Expectations.and.html | 7 - docs/functions/Expectations.expect.html | 57 - docs/functions/Expectations.or.html | 7 - docs/functions/Functions.deepEquals.html | 39 - .../functions/Functions.deepStringAssign.html | 27 - docs/functions/Functions.flatten.html | 13 - docs/functions/Functions.matrix.html | 10 - docs/functions/Functions.unflatten.html | 12 - docs/functions/cli.cli-1.html | 4 - docs/functions/cli.readJSON.html | 7 - docs/index.html | 25 - .../Expectations.IArrayExpectation.html | 46 - .../Expectations.IFinishedExpectation.html | 18 - .../Expectations.IGenericExpectation.html | 34 - .../Expectations.INumberExpectation.html | 50 - .../Expectations.IObjectExpectation.html | 45 - .../Expectations.IStringExpectation.html | 39 - docs/interfaces/Expectations.MatcherCall.html | 7 - docs/interfaces/Functions.FlattenOptions.html | 11 - .../Functions.UnflattenOptions.html | 11 - .../GobstonesLang.BoardDefinition.html | 29 - .../interfaces/GobstonesLang.BoardEvents.html | 6 - .../GobstonesLang.CellDataDefinition.html | 11 - docs/interfaces/GobstonesLang.CellEvents.html | 5 - docs/interfaces/GobstonesLang.CellInfo.html | 13 - .../SourceReader.SourceReaderLocale.html | 11 - docs/interfaces/cli.CLIAppOptions.html | 25 - docs/interfaces/cli.CLIGeneralFlags.html | 14 - docs/interfaces/cli.CLIGeneralTexts.html | 22 - docs/modules/Events.html | 19 - docs/modules/Expectations.html | 51 - docs/modules/Functions.html | 14 - docs/modules/GobstonesLang.html | 52 - docs/modules/SourceReader.html | 49 - docs/modules/Translator.html | 12 - docs/modules/Types.html | 11 - docs/modules/Types_WithRequired.html | 3 - docs/modules/cli.html | 16 - docs/types/Events.DefaultEventSignature.html | 6 - docs/types/Events.EventSignature.html | 6 - docs/types/GobstonesLang.BoardInfo.html | 14 - docs/types/GobstonesLang.CellLocation.html | 5 - ...obstonesLang.CellReadingActionAttempt.html | 3 - ...obstonesLang.InvalidSizeChangeAttempt.html | 3 - ...tonesLang.LocationChangeActionAttempt.html | 3 - ...obstonesLang.OnBoardHeadMovedCallback.html | 12 - ...stonesLang.OnBoardSizeChangedCallback.html | 21 - .../GobstonesLang.OnCellStonesChanged.html | 13 - ...bstonesLang.StonesChangeActionAttempt.html | 3 - docs/types/SourceReader.SourceInput.html | 25 - docs/types/Types.Subset.html | 8 - .../Types_WithRequired.WithRequired.html | 12 - docs/types/cli.cli.html | 3 - docs/variables/GobstonesLang.identifier.html | 6 - docs/variables/GobstonesLang.lowerId.html | 7 - .../GobstonesLang.nonAlphabeticId.html | 8 - docs/variables/GobstonesLang.number.html | 3 - .../GobstonesLang.sigiledNonAlphabeticId.html | 9 - docs/variables/GobstonesLang.upperId.html | 7 - .../SourceReader.SourceReaderIntl.html | 6 - .../SourceReader.availableLocales.html | 5 - docs/variables/SourceReader.en.html | 4 - docs/variables/SourceReader.es.html | 4 - package.json | 2 +- src/Types/Subset.ts | 8 +- 112 files changed, 294 insertions(+), 5740 deletions(-) create mode 100644 .github/workflows/on-tag-publish-docs.yml delete mode 100644 docs/.nojekyll delete mode 100644 docs/assets/highlight.css delete mode 100644 docs/assets/main.js delete mode 100644 docs/assets/navigation.js delete mode 100644 docs/assets/search.js delete mode 100644 docs/assets/style.css delete mode 100644 docs/classes/Events.EventEmitter.html delete mode 100644 docs/classes/Expectations.Expectation.html delete mode 100644 docs/classes/Expectations.FinishedExpectation.html delete mode 100644 docs/classes/Expectations.JoinedExpectation.html delete mode 100644 docs/classes/Expectations.Matchers.html delete mode 100644 docs/classes/GobstonesLang.Board.html delete mode 100644 docs/classes/GobstonesLang.BoardError.html delete mode 100644 docs/classes/GobstonesLang.Cell.html delete mode 100644 docs/classes/GobstonesLang.Color.html delete mode 100644 docs/classes/GobstonesLang.Direction.html delete mode 100644 docs/classes/GobstonesLang.InvalidBoardDescription.html delete mode 100644 docs/classes/GobstonesLang.InvalidCellReading.html delete mode 100644 docs/classes/GobstonesLang.InvalidSizeChange.html delete mode 100644 docs/classes/GobstonesLang.InvalidStonesAmount.html delete mode 100644 docs/classes/GobstonesLang.LocationFallsOutsideBoard.html delete mode 100644 docs/classes/SourceReader.DefinedSourcePosition.html delete mode 100644 docs/classes/SourceReader.DocumentSourcePosition.html delete mode 100644 docs/classes/SourceReader.EndOfDocumentSourcePosition.html delete mode 100644 docs/classes/SourceReader.EndOfInputSourcePosition.html delete mode 100644 docs/classes/SourceReader.ErrorAtEndOfDocumentBy.html delete mode 100644 docs/classes/SourceReader.ErrorAtEndOfInputBy.html delete mode 100644 docs/classes/SourceReader.ErrorNoInput.html delete mode 100644 docs/classes/SourceReader.ErrorUnmatchingPositionsBy.html delete mode 100644 docs/classes/SourceReader.KnownSourcePosition.html delete mode 100644 docs/classes/SourceReader.SourcePosition.html delete mode 100644 docs/classes/SourceReader.SourceReader.html delete mode 100644 docs/classes/SourceReader.SourceReaderError.html delete mode 100644 docs/classes/SourceReader.SourceReaderErrorBy.html delete mode 100644 docs/classes/SourceReader.UnknownSourcePosition.html delete mode 100644 docs/classes/Translator.Translator.html delete mode 100644 docs/classes/Types.BiMap.html delete mode 100644 docs/classes/cli.CLIApp.html delete mode 100644 docs/classes/cli.CLICommandBuilder.html delete mode 100644 docs/docs/globals.html delete mode 100644 docs/favicon.ico delete mode 100644 docs/functions/Expectations.and.html delete mode 100644 docs/functions/Expectations.expect.html delete mode 100644 docs/functions/Expectations.or.html delete mode 100644 docs/functions/Functions.deepEquals.html delete mode 100644 docs/functions/Functions.deepStringAssign.html delete mode 100644 docs/functions/Functions.flatten.html delete mode 100644 docs/functions/Functions.matrix.html delete mode 100644 docs/functions/Functions.unflatten.html delete mode 100644 docs/functions/cli.cli-1.html delete mode 100644 docs/functions/cli.readJSON.html delete mode 100644 docs/index.html delete mode 100644 docs/interfaces/Expectations.IArrayExpectation.html delete mode 100644 docs/interfaces/Expectations.IFinishedExpectation.html delete mode 100644 docs/interfaces/Expectations.IGenericExpectation.html delete mode 100644 docs/interfaces/Expectations.INumberExpectation.html delete mode 100644 docs/interfaces/Expectations.IObjectExpectation.html delete mode 100644 docs/interfaces/Expectations.IStringExpectation.html delete mode 100644 docs/interfaces/Expectations.MatcherCall.html delete mode 100644 docs/interfaces/Functions.FlattenOptions.html delete mode 100644 docs/interfaces/Functions.UnflattenOptions.html delete mode 100644 docs/interfaces/GobstonesLang.BoardDefinition.html delete mode 100644 docs/interfaces/GobstonesLang.BoardEvents.html delete mode 100644 docs/interfaces/GobstonesLang.CellDataDefinition.html delete mode 100644 docs/interfaces/GobstonesLang.CellEvents.html delete mode 100644 docs/interfaces/GobstonesLang.CellInfo.html delete mode 100644 docs/interfaces/SourceReader.SourceReaderLocale.html delete mode 100644 docs/interfaces/cli.CLIAppOptions.html delete mode 100644 docs/interfaces/cli.CLIGeneralFlags.html delete mode 100644 docs/interfaces/cli.CLIGeneralTexts.html delete mode 100644 docs/modules/Events.html delete mode 100644 docs/modules/Expectations.html delete mode 100644 docs/modules/Functions.html delete mode 100644 docs/modules/GobstonesLang.html delete mode 100644 docs/modules/SourceReader.html delete mode 100644 docs/modules/Translator.html delete mode 100644 docs/modules/Types.html delete mode 100644 docs/modules/Types_WithRequired.html delete mode 100644 docs/modules/cli.html delete mode 100644 docs/types/Events.DefaultEventSignature.html delete mode 100644 docs/types/Events.EventSignature.html delete mode 100644 docs/types/GobstonesLang.BoardInfo.html delete mode 100644 docs/types/GobstonesLang.CellLocation.html delete mode 100644 docs/types/GobstonesLang.CellReadingActionAttempt.html delete mode 100644 docs/types/GobstonesLang.InvalidSizeChangeAttempt.html delete mode 100644 docs/types/GobstonesLang.LocationChangeActionAttempt.html delete mode 100644 docs/types/GobstonesLang.OnBoardHeadMovedCallback.html delete mode 100644 docs/types/GobstonesLang.OnBoardSizeChangedCallback.html delete mode 100644 docs/types/GobstonesLang.OnCellStonesChanged.html delete mode 100644 docs/types/GobstonesLang.StonesChangeActionAttempt.html delete mode 100644 docs/types/SourceReader.SourceInput.html delete mode 100644 docs/types/Types.Subset.html delete mode 100644 docs/types/Types_WithRequired.WithRequired.html delete mode 100644 docs/types/cli.cli.html delete mode 100644 docs/variables/GobstonesLang.identifier.html delete mode 100644 docs/variables/GobstonesLang.lowerId.html delete mode 100644 docs/variables/GobstonesLang.nonAlphabeticId.html delete mode 100644 docs/variables/GobstonesLang.number.html delete mode 100644 docs/variables/GobstonesLang.sigiledNonAlphabeticId.html delete mode 100644 docs/variables/GobstonesLang.upperId.html delete mode 100644 docs/variables/SourceReader.SourceReaderIntl.html delete mode 100644 docs/variables/SourceReader.availableLocales.html delete mode 100644 docs/variables/SourceReader.en.html delete mode 100644 docs/variables/SourceReader.es.html diff --git a/.github/workflows/on-tag-publish-docs.yml b/.github/workflows/on-tag-publish-docs.yml new file mode 100644 index 0000000..35bd91e --- /dev/null +++ b/.github/workflows/on-tag-publish-docs.yml @@ -0,0 +1,43 @@ +name: on-tag-publish-docs + +on: + push: + tags: + - 'v*' + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: 'pages' + cancel-in-progress: false + +jobs: + publish-docs: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Setup node version + uses: actions/setup-node@v4 + with: + node-version: '20' + - name: Installing project dependencies + run: npm install + - name: Building the docs + run: npm run doc + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: './docs' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 3c8ac75..6a98bde 100755 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,31 @@ -# Node files # -node_modules/ -npm-debug.log -yarn-error.log -.rollup.cache - -# OS generated files # +# OS generated files .DS_Store Thumbs.db .tmp/ -# Dist # -dist/ -coverage/ -tsconfig.build.json - -# IDE # +# IDE generated file .idea/ -# PackageManager specific # +# PackageManager specific lock files pnpm-lock.yaml package-lock.json yarn.lock + +# Node generated files +node_modules/ +npm-debug.log +yarn-error.log + +# Build process generated files +.rollup.cache +tsconfig.build.json + +# Test coverage generated folder +coverage/ + +# Dist generated folder +dist/ + +# Docs generated folder +docs/ + diff --git a/.husky/commit-msg b/.husky/commit-msg index c160a77..bb57b22 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1,34 @@ #!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" -npx --no -- commitlint --edit ${1} +# This hook is invoked by git-commit and git-merge, and can be +# bypassed with the --no-verify option. It takes a single +# parameter, the name of the file that holds the proposed commit +# log message. + +# Exiting with a non-zero status causes the command to abort. + +# The hook is allowed to edit the message file in place, and can +# be used to normalize the message into some project standard format. +# It can also be used to refuse the commit after inspecting the +# message file. + +# The default commit-msg hook, when enabled, detects duplicate +# Signed-off-by trailers, and aborts the commit if one is found. + +# Load husky +. "$(dirname -- "$0")/_/husky.sh"; + +# Read parameters +COMMIT_MSG_FILE=$1; + +# We use this hook to run "commitlint", that verifies that the +# message sent has the correct format for the project, aborting otherwise. + +# Show welcome message +echo "**************************"; +echo "Linting the commit message"; +echo "**************************"; +echo ""; + +# Run commitlint +npx --no -- commitlint --edit ${1}; diff --git a/.husky/pre-commit b/.husky/pre-commit index 717f53c..85af07d 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,6 +1,49 @@ #!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" -npx gobstones-scripts run husky.commit -git add --all -exit +# This hook is invoked by git-commit, and can be bypassed with the +# --no-verify option. It takes no parameters, and is invoked before +# obtaining the proposed commit log message and making a commit. +# Exiting with a non-zero status from this script causes the git +# commit command to abort before creating a commit. + +# The default pre-commit hook, when enabled, catches introduction of +# lines with trailing whitespaces and aborts the commit when such a +# line is found. + +# All the git commit hooks are invoked with the environment variable +# GIT_EDITOR=: if the command will not bring up an editor to modify +# the commit message. + +# The default pre-commit hook, when enabled and with the hooks.allownonascii +# config option unset or set to false prevents the use of non-ASCII filenames. + +# Load husky +. "$(dirname -- "$0")/_/husky.sh"; + +# Read parameters +# NOTHING TO READ HERE + +# We currently use this hook to update the changelog of the project +# and make sure all files are prettified before sending them to the commit. +# Generated files are added to the commit. + +# Show welcome message +echo "**************************"; +echo "Running pre commit hooks"; +echo "**************************"; +echo ""; + +# Run prettify +echo "Run prettify\n"; +npx --no -- gobstones-scripts run prettify --silent ; + +# Run changelog +echo "\nRun changelog\n"; +npx --no gobstones-scripts run changelog --silent ; + +# Add all generated files +echo "\nAdd generated files to commit\n"; +git add --all; + +# Exit +exit 0; diff --git a/.husky/pre-push b/.husky/pre-push index 848bc70..6299eb5 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,5 +1,73 @@ #!/usr/bin/env sh + +# This hook is called by git-push and can be used to prevent a +# push from taking place. The hook is called with two parameters +# which provide the name and location of the destination remote, +# if a named remote is not being used both values will be the same. + +# Information about what is to be pushed is provided on the hook’s +# standard input with lines of the form: +# SP SP SP LF + +# For instance, if the command git push origin master:foreign were +# run the hook would receive a line like the following: +# refs/heads/master 67890 refs/heads/foreign 12345 + +# although the full object name would be supplied. If the foreign ref +# does not yet exist the will be the all-zeroes +# object name. If a ref is to be deleted, the will be +# supplied as (delete) and the will be the +# all-zeroes object name. If the local commit was specified by +# something other than a name which could be expanded +# (such as HEAD~, or an object name) it will be supplied as it was +# originally given. + +# If this hook exits with a non-zero status, git push will abort without +# pushing anything. Information about why the push is rejected may be +# sent to the user by writing to standard error. + +# Load husky . "$(dirname -- "$0")/_/husky.sh" -npx gobstones-scripts run husky.push -exit +# Read parameters +REMOTE_NAME=$1; +REMOTE_URL=$2; +# Read the input and split it approprietly +INPUT=$(cat); +INPUT_ARR=($INPUT); + +LOCAL_REF=${INPUT_ARR[0]} +LOCAL_OBJ_NAME=${INPUT_ARR[1]} +REMOTE_REF=${INPUT_ARR[2]} +REMOTE_OBJ_NAME=${INPUT_ARR[3]} + +# We currently use this hook to verify that any commit (to any branch) +# passes the tests configured. +# If a tag is being pushed, then, we generate the documentation +# and publish the generated folder to the corresponding docs branch +# on the origin remote. +# This particular project also updated the version of the library +# to match that of the tag. + +# Show welcome message +echo "**************************"; +echo "Running pre push hooks"; +echo "**************************"; +echo ""; + +# Run all the tests +echo "Running tests"; +npx --no -- gobstones-scripts run test --silent; + +# If pushing a tag, generate doc and push them as +# a "docs" branch in the remote. +case "$LOCAL_REF" in + refs\/tags*) + # Apply specific code when publishing tags + echo "\nYour tag is being pushed...\n";; + *) + # Apply specific code when publishing any branch + echo "\nYour branch is being pushed...\n";; +esac + +exit 0; diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg index 5f87f16..de3f65c 100755 --- a/.husky/prepare-commit-msg +++ b/.husky/prepare-commit-msg @@ -1,11 +1,79 @@ #!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" -COMMIT_MSG_FILE=$1 -COMMIT_SOURCE=$2 -SHA1=$3 +# This hook is invoked by git-commit right after preparing +# the default log message, and before the editor is started. -if [ $COMMIT_SOURCE = 'commit' ] && [ -n $SHA1 ]; then - exit 0; +# It takes one to three parameters. + +# The first is the name of the file that contains the commit log message. +# The second is the source of the commit message, and can be: +# * message (if a -m or -F option was given); +# * template (if a -t option was given or the configuration option +# commit.template is set); +# * merge (if the commit is a merge or a .git/MERGE_MSG file exists); +# * squash (if a .git/SQUASH_MSG file exists); +# * commit (if a -c, -C or --amend option was given) +# The third is a commit object name if source is commit. + +# If the exit status is non-zero, git commit will abort. +# The purpose of the hook is to edit the message file in place, +# and it is not suppressed by the --no-verify option. A non-zero +# exit means a failure of the hook and aborts the commit. It +# should not be used as a replacement for the pre-commit hook. + +# The sample prepare-commit-msg hook that comes with Git removes +# the help message found in the commented portion of the commit template. + +# Load husky +. "$(dirname -- "$0")/_/husky.sh"; + +# Read parameters +COMMIT_MSG_FILE=$1; +COMMIT_SOURCE=$2; +SHA1=$3; + +# We use this hook to run "cz", that forces the build of a +# semantic commit message through a prompt. + +# Show welcome message +echo "**************************"; +echo "Generate commit message"; +echo "**************************"; +echo ""; + +# Check if we are doing an amend +if [ "$COMMIT_SOURCE" = 'commit' ] && [ -n $SHA1 ]; then + # Amends do not call the "cz" command. + exit 0; fi -exec < /dev/tty && npx cz --hook || true + +# Check if we are doing an squash +if [ "$COMMIT_SOURCE" = 'squash' ]; then + # Squashes should not trigger the cz command. + exit 0; +fi + +# Check if we are doing an merge +if [ "$COMMIT_SOURCE" = 'merge' ]; then + # Merging should not trigger the cz command. + exit 0; +fi + +# Check if we are using a template +if [ "$COMMIT_SOURCE" = 'template' ]; then + # Cannot use templates, warn the user and fail. + echo "Setting a template through -t or commit.template in this project "; + echo "has been disabled. Please run a simple commit.\n"; + exit 1; +fi + +# Check if a message was given +if [ "$COMMIT_SOURCE" = 'message' ]; then + # Cannot use message, warn the user and fail. + echo "Setting a message through -m or -F option in this project "; + echo "has been disabled. Please run a simple commit.\n"; + exit 1; +fi + +# Regular commit has been performed, run the command. +exec < /dev/tty && npx cz --hook || true; diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e2ac661..0000000 --- a/docs/.nojekyll +++ /dev/null @@ -1 +0,0 @@ -TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/docs/assets/highlight.css b/docs/assets/highlight.css deleted file mode 100644 index 412577c..0000000 --- a/docs/assets/highlight.css +++ /dev/null @@ -1,134 +0,0 @@ -:root { - --light-hl-0: #001080; - --dark-hl-0: #9CDCFE; - --light-hl-1: #000000; - --dark-hl-1: #D4D4D4; - --light-hl-2: #AF00DB; - --dark-hl-2: #C586C0; - --light-hl-3: #A31515; - --dark-hl-3: #CE9178; - --light-hl-4: #0000FF; - --dark-hl-4: #569CD6; - --light-hl-5: #267F99; - --dark-hl-5: #4EC9B0; - --light-hl-6: #795E26; - --dark-hl-6: #DCDCAA; - --light-hl-7: #0070C1; - --dark-hl-7: #4FC1FF; - --light-hl-8: #098658; - --dark-hl-8: #B5CEA8; - --light-hl-9: #008000; - --dark-hl-9: #6A9955; - --light-hl-10: #000000; - --dark-hl-10: #C8C8C8; - --light-hl-11: #811F3F; - --dark-hl-11: #D16969; - --light-hl-12: #D16969; - --dark-hl-12: #CE9178; - --light-hl-13: #EE0000; - --dark-hl-13: #D7BA7D; - --light-hl-14: #EE0000; - --dark-hl-14: #DCDCAA; - --light-hl-15: #000000; - --dark-hl-15: #D7BA7D; - --light-code-background: #FFFFFF; - --dark-code-background: #1E1E1E; -} - -@media (prefers-color-scheme: light) { :root { - --hl-0: var(--light-hl-0); - --hl-1: var(--light-hl-1); - --hl-2: var(--light-hl-2); - --hl-3: var(--light-hl-3); - --hl-4: var(--light-hl-4); - --hl-5: var(--light-hl-5); - --hl-6: var(--light-hl-6); - --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); - --hl-9: var(--light-hl-9); - --hl-10: var(--light-hl-10); - --hl-11: var(--light-hl-11); - --hl-12: var(--light-hl-12); - --hl-13: var(--light-hl-13); - --hl-14: var(--light-hl-14); - --hl-15: var(--light-hl-15); - --code-background: var(--light-code-background); -} } - -@media (prefers-color-scheme: dark) { :root { - --hl-0: var(--dark-hl-0); - --hl-1: var(--dark-hl-1); - --hl-2: var(--dark-hl-2); - --hl-3: var(--dark-hl-3); - --hl-4: var(--dark-hl-4); - --hl-5: var(--dark-hl-5); - --hl-6: var(--dark-hl-6); - --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); - --hl-9: var(--dark-hl-9); - --hl-10: var(--dark-hl-10); - --hl-11: var(--dark-hl-11); - --hl-12: var(--dark-hl-12); - --hl-13: var(--dark-hl-13); - --hl-14: var(--dark-hl-14); - --hl-15: var(--dark-hl-15); - --code-background: var(--dark-code-background); -} } - -:root[data-theme='light'] { - --hl-0: var(--light-hl-0); - --hl-1: var(--light-hl-1); - --hl-2: var(--light-hl-2); - --hl-3: var(--light-hl-3); - --hl-4: var(--light-hl-4); - --hl-5: var(--light-hl-5); - --hl-6: var(--light-hl-6); - --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); - --hl-9: var(--light-hl-9); - --hl-10: var(--light-hl-10); - --hl-11: var(--light-hl-11); - --hl-12: var(--light-hl-12); - --hl-13: var(--light-hl-13); - --hl-14: var(--light-hl-14); - --hl-15: var(--light-hl-15); - --code-background: var(--light-code-background); -} - -:root[data-theme='dark'] { - --hl-0: var(--dark-hl-0); - --hl-1: var(--dark-hl-1); - --hl-2: var(--dark-hl-2); - --hl-3: var(--dark-hl-3); - --hl-4: var(--dark-hl-4); - --hl-5: var(--dark-hl-5); - --hl-6: var(--dark-hl-6); - --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); - --hl-9: var(--dark-hl-9); - --hl-10: var(--dark-hl-10); - --hl-11: var(--dark-hl-11); - --hl-12: var(--dark-hl-12); - --hl-13: var(--dark-hl-13); - --hl-14: var(--dark-hl-14); - --hl-15: var(--dark-hl-15); - --code-background: var(--dark-code-background); -} - -.hl-0 { color: var(--hl-0); } -.hl-1 { color: var(--hl-1); } -.hl-2 { color: var(--hl-2); } -.hl-3 { color: var(--hl-3); } -.hl-4 { color: var(--hl-4); } -.hl-5 { color: var(--hl-5); } -.hl-6 { color: var(--hl-6); } -.hl-7 { color: var(--hl-7); } -.hl-8 { color: var(--hl-8); } -.hl-9 { color: var(--hl-9); } -.hl-10 { color: var(--hl-10); } -.hl-11 { color: var(--hl-11); } -.hl-12 { color: var(--hl-12); } -.hl-13 { color: var(--hl-13); } -.hl-14 { color: var(--hl-14); } -.hl-15 { color: var(--hl-15); } -pre, code { background: var(--code-background); } diff --git a/docs/assets/main.js b/docs/assets/main.js deleted file mode 100644 index d0aa8d5..0000000 --- a/docs/assets/main.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; -"use strict";(()=>{var Pe=Object.create;var ne=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Ie(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Pe(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var Be={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Be[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",B="mouseup",J={x:0,y:0},fe=!1,ee=!1,He=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(He=!0,F="touchstart",pe="touchmove",B="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){D||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!D&&this.active&&n.target.closest(".col-sidebar")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var Z=class extends C{constructor(n){super(n);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let r=Q.getItem(this.key);this.el.open=r?r==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let i=this.summary.querySelector("a");i&&i.addEventListener("click",()=>{location.assign(i.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); -/*! Bundled license information: - -lunr/lunr.js: - (** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - *) - (*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - *) - (*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - *) -*/ diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js deleted file mode 100644 index 0bf0193..0000000 --- a/docs/assets/navigation.js +++ /dev/null @@ -1 +0,0 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA52Z3XLbNhCF34XXblI7Tdr6TpbtVKltdaJ4epHJdCByJaEGAQYEHbudvnuHIGUCxHIB5tLmOd9Z4p/Q538zA08mO8+uHkGaOjvJKmYO2XlWqqIRUL/u/v/qYEqRnWQPXBbZ+dlJlh+4KDTI7Pyzj7gquTGgB1AuWF0PIFfkU0/Pfvnv5AV2CTvWCGPlG76XzDQaBqp5rgYmqh2V/OOvP5++PXMCksgpyC8u9KmC3DDDlcTa0nma1qKDAWlQl+b8QbXqNZe8PkCRDkYcVMAHxeUcfKCn4LfM5AfQdYR5lFGo1UJr9ozWyaUBvWP5GBtYRl349p3LJ1t6MiLa2qOU9yBB83xeSGgiM+6acgt6XkTgIRPW278hN/MSAg+ZsDGay/28hMBDJfRjbsmEiKMdMcVkshhYu0bm1u2jmCx8xLufHAJYaRTSyQiO0lGG0oHfXRivj65wVXx5lLQkXgtmDMh1NaI5bT0AfTHV1vdyNwc8llPoAqC6+towUWONODAHHdETragbmIu65nsZR7pqAty/D83rRQSmZEbzJ5rSaQhII5OqeZGRI++92tZGSahvmNyHo897nDQCLxTTRbgF+SArojYgK7jSWiFHJQRllRRvCe7Kg5NaDclQIl6OFZEnN64hx7d+n/QiJDdq+cgEL2wjXEKda16lsCdsCUltI30EVnB3tJAhjiOBv+H/wPLA5B4S8YMhhW7ti1I10qTyHQuVcKNyu9ZfMyHqdWNqXkDSXJg0RufHJey45JP7NTJPBge1JHdTavTFQ4PR7yAP2g6DS2bYrKJDUywiuexBHEOu5E4lAltptGV9XvdBhTQpwgq+0trM4/ihka4yhdrP2IVdgRbGQFmZeALmiqUF8zgpbcoVSzu2QW9Kfz3CGMtcS9uhvwErbtUjFO3JdsvyBzpwypWYNrTMvDzEF09s+75bKHtrLCowxDJc8Yxem7TF8ngB0vAdd+9qHpnmbBseiwatT33jAoX6BnpVxGm9kEBJJReiOrAtGJ6nIEcGCm2/TBOIVkeAar7nAoq7uaXiPiKoqaq0du2FAco9DW9Uo3NoVzG3EY6HYfdp0lnYbltQdL4/VM3xs5nHRT3kgVLlTdnew81KQU1UzJUs1rvvyiKc0cCVrJrvSENsZFT7+bAwXqEXz7Eg1JQaYyucldE7ogF3yipTyL00iryXZXsnw+X+2Jp1WumokYr7XapvclZ/Iw4qYBZ7Lna8cBBQbBWZRk58CU9yo9/DgTjan4iDCriXD7O7EvWkvkV7PhOAntMn36PzUAf2Tj2aUN1BA6Eiswk5yTi+lTQC27kmK24NxGbIHhkXLaJ7szrKHhsItnvfNEEb3zX5/ng1SL67O3/STNaCGYXszcOzpJ0ZQx3HpIOaorbD0KusHRFIUe2/027N+C2rkFIswD4k50GzrSEYoJ25exb/bc6qX//JzeEjfG24ds/w3vv85WqSXg6HOkX6SIKP1J0LHhaaC55U2fJmtaiQdm/93TPyQvBmtVRlyWRx0XCBrvw9yJdFmIuqoq7Zh9oSbteXN93vWUxcC7Ynga4uDfkJniauWnyk1VFIrw+7cdESwl4MFlPPOdyC9+4fTolrdA2s+LBZ3035j8+R6/Mv/wOZu+aPGSAAAA==" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js deleted file mode 100644 index 121f08d..0000000 --- a/docs/assets/search.js +++ /dev/null @@ -1 +0,0 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css deleted file mode 100644 index 07a385b..0000000 --- a/docs/assets/style.css +++ /dev/null @@ -1,1394 +0,0 @@ -:root { - /* Light */ - --light-color-background: #f2f4f8; - --light-color-background-secondary: #eff0f1; - --light-color-warning-text: #222; - --light-color-background-warning: #e6e600; - --light-color-icon-background: var(--light-color-background); - --light-color-accent: #c5c7c9; - --light-color-active-menu-item: var(--light-color-accent); - --light-color-text: #222; - --light-color-text-aside: #6e6e6e; - --light-color-link: #1f70c2; - - --light-color-ts-keyword: #056bd6; - --light-color-ts-project: #b111c9; - --light-color-ts-module: var(--light-color-ts-project); - --light-color-ts-namespace: var(--light-color-ts-project); - --light-color-ts-enum: #7e6f15; - --light-color-ts-enum-member: var(--light-color-ts-enum); - --light-color-ts-variable: #4760ec; - --light-color-ts-function: #572be7; - --light-color-ts-class: #1f70c2; - --light-color-ts-interface: #108024; - --light-color-ts-constructor: var(--light-color-ts-class); - --light-color-ts-property: var(--light-color-ts-variable); - --light-color-ts-method: var(--light-color-ts-function); - --light-color-ts-call-signature: var(--light-color-ts-method); - --light-color-ts-index-signature: var(--light-color-ts-property); - --light-color-ts-constructor-signature: var(--light-color-ts-constructor); - --light-color-ts-parameter: var(--light-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: var(--light-color-ts-type-alias); - --light-color-ts-accessor: var(--light-color-ts-property); - --light-color-ts-get-signature: var(--light-color-ts-accessor); - --light-color-ts-set-signature: var(--light-color-ts-accessor); - --light-color-ts-type-alias: #d51270; - /* reference not included as links will be colored with the kind that it points to */ - - --light-external-icon: url("data:image/svg+xml;utf8,"); - --light-color-scheme: light; - - /* Dark */ - --dark-color-background: #2b2e33; - --dark-color-background-secondary: #1e2024; - --dark-color-background-warning: #bebe00; - --dark-color-warning-text: #222; - --dark-color-icon-background: var(--dark-color-background-secondary); - --dark-color-accent: #9096a2; - --dark-color-active-menu-item: #5d5d6a; - --dark-color-text: #f5f5f5; - --dark-color-text-aside: #dddddd; - --dark-color-link: #00aff4; - - --dark-color-ts-keyword: #3399ff; - --dark-color-ts-project: #e358ff; - --dark-color-ts-module: var(--dark-color-ts-project); - --dark-color-ts-namespace: var(--dark-color-ts-project); - --dark-color-ts-enum: #f4d93e; - --dark-color-ts-enum-member: var(--dark-color-ts-enum); - --dark-color-ts-variable: #798dff; - --dark-color-ts-function: #a280ff; - --dark-color-ts-class: #8ac4ff; - --dark-color-ts-interface: #6cff87; - --dark-color-ts-constructor: var(--dark-color-ts-class); - --dark-color-ts-property: var(--dark-color-ts-variable); - --dark-color-ts-method: var(--dark-color-ts-function); - --dark-color-ts-call-signature: var(--dark-color-ts-method); - --dark-color-ts-index-signature: var(--dark-color-ts-property); - --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); - --dark-color-ts-parameter: var(--dark-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); - --dark-color-ts-accessor: var(--dark-color-ts-property); - --dark-color-ts-get-signature: var(--dark-color-ts-accessor); - --dark-color-ts-set-signature: var(--dark-color-ts-accessor); - --dark-color-ts-type-alias: #ff6492; - /* reference not included as links will be colored with the kind that it points to */ - - --dark-external-icon: url("data:image/svg+xml;utf8,"); - --dark-color-scheme: dark; -} - -@media (prefers-color-scheme: light) { - :root { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); - } -} - -@media (prefers-color-scheme: dark) { - :root { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); - } -} - -html { - color-scheme: var(--color-scheme); -} - -body { - margin: 0; -} - -:root[data-theme="light"] { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); -} - -:root[data-theme="dark"] { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); -} - -.always-visible, -.always-visible .tsd-signatures { - display: inherit !important; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - line-height: 1.2; -} - -h1 > a, -h2 > a, -h3 > a, -h4 > a, -h5 > a, -h6 > a { - text-decoration: none; - color: var(--color-text); -} - -h1 { - font-size: 1.875rem; - margin: 0.67rem 0; -} - -h2 { - font-size: 1.5rem; - margin: 0.83rem 0; -} - -h3 { - font-size: 1.25rem; - margin: 1rem 0; -} - -h4 { - font-size: 1.05rem; - margin: 1.33rem 0; -} - -h5 { - font-size: 1rem; - margin: 1.5rem 0; -} - -h6 { - font-size: 0.875rem; - margin: 2.33rem 0; -} - -.uppercase { - text-transform: uppercase; -} - -dl, -menu, -ol, -ul { - margin: 1em 0; -} - -dd { - margin: 0 0 0 40px; -} - -.container { - max-width: 1700px; - padding: 0 2rem; -} - -/* Footer */ -.tsd-generator { - border-top: 1px solid var(--color-accent); - padding-top: 1rem; - padding-bottom: 1rem; - max-height: 3.5rem; -} - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; -} - -.container-main { - margin: 0 auto; - /* toolbar, footer, margin */ - min-height: calc(100vh - 41px - 56px - 4rem); -} - -@keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -@keyframes fade-out { - from { - opacity: 1; - visibility: visible; - } - to { - opacity: 0; - } -} -@keyframes fade-in-delayed { - 0% { - opacity: 0; - } - 33% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@keyframes fade-out-delayed { - 0% { - opacity: 1; - visibility: visible; - } - 66% { - opacity: 0; - } - 100% { - opacity: 0; - } -} -@keyframes pop-in-from-right { - from { - transform: translate(100%, 0); - } - to { - transform: translate(0, 0); - } -} -@keyframes pop-out-to-right { - from { - transform: translate(0, 0); - visibility: visible; - } - to { - transform: translate(100%, 0); - } -} -body { - background: var(--color-background); - font-family: "Segoe UI", sans-serif; - font-size: 16px; - color: var(--color-text); -} - -a { - color: var(--color-link); - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -a.external[target="_blank"] { - background-image: var(--external-icon); - background-position: top 3px right; - background-repeat: no-repeat; - padding-right: 13px; -} - -code, -pre { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - padding: 0.2em; - margin: 0; - font-size: 0.875rem; - border-radius: 0.8em; -} - -pre { - position: relative; - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; - padding: 10px; - border: 1px solid var(--color-accent); -} -pre code { - padding: 0; - font-size: 100%; -} -pre > button { - position: absolute; - top: 10px; - right: 10px; - opacity: 0; - transition: opacity 0.1s; - box-sizing: border-box; -} -pre:hover > button, -pre > button.visible { - opacity: 1; -} - -blockquote { - margin: 1em 0; - padding-left: 1em; - border-left: 4px solid gray; -} - -.tsd-typography { - line-height: 1.333em; -} -.tsd-typography ul { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-typography .tsd-index-panel h3, -.tsd-index-panel .tsd-typography h3, -.tsd-typography h4, -.tsd-typography h5, -.tsd-typography h6 { - font-size: 1em; -} -.tsd-typography h5, -.tsd-typography h6 { - font-weight: normal; -} -.tsd-typography p, -.tsd-typography ul, -.tsd-typography ol { - margin: 1em 0; -} -.tsd-typography table { - border-collapse: collapse; - border: none; -} -.tsd-typography td, -.tsd-typography th { - padding: 6px 13px; - border: 1px solid var(--color-accent); -} -.tsd-typography thead, -.tsd-typography tr:nth-child(even) { - background-color: var(--color-background-secondary); -} - -.tsd-breadcrumb { - margin: 0; - padding: 0; - color: var(--color-text-aside); -} -.tsd-breadcrumb a { - color: var(--color-text-aside); - text-decoration: none; -} -.tsd-breadcrumb a:hover { - text-decoration: underline; -} -.tsd-breadcrumb li { - display: inline; -} -.tsd-breadcrumb li:after { - content: " / "; -} - -.tsd-comment-tags { - display: flex; - flex-direction: column; -} -dl.tsd-comment-tag-group { - display: flex; - align-items: center; - overflow: hidden; - margin: 0.5em 0; -} -dl.tsd-comment-tag-group dt { - display: flex; - margin-right: 0.5em; - font-size: 0.875em; - font-weight: normal; -} -dl.tsd-comment-tag-group dd { - margin: 0; -} -code.tsd-tag { - padding: 0.25em 0.4em; - border: 0.1em solid var(--color-accent); - margin-right: 0.25em; - font-size: 70%; -} -h1 code.tsd-tag:first-of-type { - margin-left: 0.25em; -} - -dl.tsd-comment-tag-group dd:before, -dl.tsd-comment-tag-group dd:after { - content: " "; -} -dl.tsd-comment-tag-group dd pre, -dl.tsd-comment-tag-group dd:after { - clear: both; -} -dl.tsd-comment-tag-group p { - margin: 0; -} - -.tsd-panel.tsd-comment .lead { - font-size: 1.1em; - line-height: 1.333em; - margin-bottom: 2em; -} -.tsd-panel.tsd-comment .lead:last-child { - margin-bottom: 0; -} - -.tsd-filter-visibility h4 { - font-size: 1rem; - padding-top: 0.75rem; - padding-bottom: 0.5rem; - margin: 0; -} -.tsd-filter-item:not(:last-child) { - margin-bottom: 0.5rem; -} -.tsd-filter-input { - display: flex; - width: fit-content; - width: -moz-fit-content; - align-items: center; - user-select: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - cursor: pointer; -} -.tsd-filter-input input[type="checkbox"] { - cursor: pointer; - position: absolute; - width: 1.5em; - height: 1.5em; - opacity: 0; -} -.tsd-filter-input input[type="checkbox"]:disabled { - pointer-events: none; -} -.tsd-filter-input svg { - cursor: pointer; - width: 1.5em; - height: 1.5em; - margin-right: 0.5em; - border-radius: 0.33em; - /* Leaving this at full opacity breaks event listeners on Firefox. - Don't remove unless you know what you're doing. */ - opacity: 0.99; -} -.tsd-filter-input input[type="checkbox"]:focus + svg { - transform: scale(0.95); -} -.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { - transform: scale(1); -} -.tsd-checkbox-background { - fill: var(--color-accent); -} -input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { - stroke: var(--color-text); -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { - fill: var(--color-background); - stroke: var(--color-accent); - stroke-width: 0.25rem; -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { - stroke: var(--color-accent); -} - -.tsd-theme-toggle { - padding-top: 0.75rem; -} -.tsd-theme-toggle > h4 { - display: inline; - vertical-align: middle; - margin-right: 0.75rem; -} - -.tsd-hierarchy { - list-style: square; - margin: 0; -} -.tsd-hierarchy .target { - font-weight: bold; -} - -.tsd-panel-group.tsd-index-group { - margin-bottom: 0; -} -.tsd-index-panel .tsd-index-list { - list-style: none; - line-height: 1.333em; - margin: 0; - padding: 0.25rem 0 0 0; - overflow: hidden; - display: grid; - grid-template-columns: repeat(3, 1fr); - column-gap: 1rem; - grid-template-rows: auto; -} -@media (max-width: 1024px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(2, 1fr); - } -} -@media (max-width: 768px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(1, 1fr); - } -} -.tsd-index-panel .tsd-index-list li { - -webkit-page-break-inside: avoid; - -moz-page-break-inside: avoid; - -ms-page-break-inside: avoid; - -o-page-break-inside: avoid; - page-break-inside: avoid; -} - -.tsd-flag { - display: inline-block; - padding: 0.25em 0.4em; - border-radius: 4px; - color: var(--color-comment-tag-text); - background-color: var(--color-comment-tag); - text-indent: 0; - font-size: 75%; - line-height: 1; - font-weight: normal; -} - -.tsd-anchor { - position: relative; - top: -100px; -} - -.tsd-member { - position: relative; -} -.tsd-member .tsd-anchor + h3 { - display: flex; - align-items: center; - margin-top: 0; - margin-bottom: 0; - border-bottom: none; -} - -.tsd-navigation.settings { - margin: 1rem 0; -} -.tsd-navigation > a, -.tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.5rem); -} -.tsd-navigation a, -.tsd-navigation summary > span, -.tsd-page-navigation a { - display: inline-flex; - align-items: center; - padding: 0.25rem; - color: var(--color-text); - text-decoration: none; - box-sizing: border-box; -} -.tsd-navigation a.current, -.tsd-page-navigation a.current { - background: var(--color-active-menu-item); -} -.tsd-navigation a:hover, -.tsd-page-navigation a:hover { - text-decoration: underline; -} -.tsd-navigation ul, -.tsd-page-navigation ul { - margin-top: 0; - margin-bottom: 0; - padding: 0; - list-style: none; -} -.tsd-navigation li, -.tsd-page-navigation li { - padding: 0; - max-width: 100%; -} -.tsd-nested-navigation { - margin-left: 3rem; -} -.tsd-nested-navigation > li > details { - margin-left: -1.5rem; -} -.tsd-small-nested-navigation { - margin-left: 1.5rem; -} -.tsd-small-nested-navigation > li > details { - margin-left: -1.5rem; -} - -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 1.75rem - 0.5rem); -} - -.tsd-page-navigation ul { - padding-left: 1.75rem; -} - -#tsd-sidebar-links a { - margin-top: 0; - margin-bottom: 0.5rem; - line-height: 1.25rem; -} -#tsd-sidebar-links a:last-of-type { - margin-bottom: 0; -} - -a.tsd-index-link { - padding: 0.25rem 0 !important; - font-size: 1rem; - line-height: 1.25rem; - display: inline-flex; - align-items: center; - color: var(--color-text); -} -.tsd-accordion-summary { - list-style-type: none; /* hide marker on non-safari */ - outline: none; /* broken on safari, so just hide it */ -} -.tsd-accordion-summary::-webkit-details-marker { - display: none; /* hide marker on safari */ -} -.tsd-accordion-summary, -.tsd-accordion-summary a { - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - - cursor: pointer; -} -.tsd-accordion-summary a { - width: calc(100% - 1.5rem); -} -.tsd-accordion-summary > * { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} -.tsd-index-accordion .tsd-accordion-summary > svg { - margin-left: 0.25rem; -} -.tsd-index-content > :not(:first-child) { - margin-top: 0.75rem; -} -.tsd-index-heading { - margin-top: 1.5rem; - margin-bottom: 0.75rem; -} - -.tsd-kind-icon { - margin-right: 0.5rem; - width: 1.25rem; - height: 1.25rem; - min-width: 1.25rem; - min-height: 1.25rem; -} -.tsd-kind-icon path { - transform-origin: center; - transform: scale(1.1); -} -.tsd-signature > .tsd-kind-icon { - margin-right: 0.8rem; -} - -.tsd-panel { - margin-bottom: 2.5rem; -} -.tsd-panel.tsd-member { - margin-bottom: 4rem; -} -.tsd-panel:empty { - display: none; -} -.tsd-panel > h1, -.tsd-panel > h2, -.tsd-panel > h3 { - margin: 1.5rem -1.5rem 0.75rem -1.5rem; - padding: 0 1.5rem 0.75rem 1.5rem; -} -.tsd-panel > h1.tsd-before-signature, -.tsd-panel > h2.tsd-before-signature, -.tsd-panel > h3.tsd-before-signature { - margin-bottom: 0; - border-bottom: none; -} - -.tsd-panel-group { - margin: 4rem 0; -} -.tsd-panel-group.tsd-index-group { - margin: 2rem 0; -} -.tsd-panel-group.tsd-index-group details { - margin: 2rem 0; -} - -#tsd-search { - transition: background-color 0.2s; -} -#tsd-search .title { - position: relative; - z-index: 2; -} -#tsd-search .field { - position: absolute; - left: 0; - top: 0; - right: 2.5rem; - height: 100%; -} -#tsd-search .field input { - box-sizing: border-box; - position: relative; - top: -50px; - z-index: 1; - width: 100%; - padding: 0 10px; - opacity: 0; - outline: 0; - border: 0; - background: transparent; - color: var(--color-text); -} -#tsd-search .field label { - position: absolute; - overflow: hidden; - right: -40px; -} -#tsd-search .field input, -#tsd-search .title, -#tsd-toolbar-links a { - transition: opacity 0.2s; -} -#tsd-search .results { - position: absolute; - visibility: hidden; - top: 40px; - width: 100%; - margin: 0; - padding: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -#tsd-search .results li { - background-color: var(--color-background); - line-height: initial; - padding: 4px; -} -#tsd-search .results li:nth-child(even) { - background-color: var(--color-background-secondary); -} -#tsd-search .results li.state { - display: none; -} -#tsd-search .results li.current:not(.no-results), -#tsd-search .results li:hover:not(.no-results) { - background-color: var(--color-accent); -} -#tsd-search .results a { - display: flex; - align-items: center; - padding: 0.25rem; - box-sizing: border-box; -} -#tsd-search .results a:before { - top: 10px; -} -#tsd-search .results span.parent { - color: var(--color-text-aside); - font-weight: normal; -} -#tsd-search.has-focus { - background-color: var(--color-accent); -} -#tsd-search.has-focus .field input { - top: 0; - opacity: 1; -} -#tsd-search.has-focus .title, -#tsd-search.has-focus #tsd-toolbar-links a { - z-index: 0; - opacity: 0; -} -#tsd-search.has-focus .results { - visibility: visible; -} -#tsd-search.loading .results li.state.loading { - display: block; -} -#tsd-search.failure .results li.state.failure { - display: block; -} - -#tsd-toolbar-links { - position: absolute; - top: 0; - right: 2rem; - height: 100%; - display: flex; - align-items: center; - justify-content: flex-end; -} -#tsd-toolbar-links a { - margin-left: 1.5rem; -} -#tsd-toolbar-links a:hover { - text-decoration: underline; -} - -.tsd-signature { - margin: 0 0 1rem 0; - padding: 1rem 0.5rem; - border: 1px solid var(--color-accent); - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - font-size: 14px; - overflow-x: auto; -} - -.tsd-signature-keyword { - color: var(--color-ts-keyword); - font-weight: normal; -} - -.tsd-signature-symbol { - color: var(--color-text-aside); - font-weight: normal; -} - -.tsd-signature-type { - font-style: italic; - font-weight: normal; -} - -.tsd-signatures { - padding: 0; - margin: 0 0 1em 0; - list-style-type: none; -} -.tsd-signatures .tsd-signature { - margin: 0; - border-color: var(--color-accent); - border-width: 1px 0; - transition: background-color 0.1s; -} -.tsd-description .tsd-signatures .tsd-signature { - border-width: 1px; -} - -ul.tsd-parameter-list, -ul.tsd-type-parameter-list { - list-style: square; - margin: 0; - padding-left: 20px; -} -ul.tsd-parameter-list > li.tsd-parameter-signature, -ul.tsd-type-parameter-list > li.tsd-parameter-signature { - list-style: none; - margin-left: -20px; -} -ul.tsd-parameter-list h5, -ul.tsd-type-parameter-list h5 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} -.tsd-sources { - margin-top: 1rem; - font-size: 0.875em; -} -.tsd-sources a { - color: var(--color-text-aside); - text-decoration: underline; -} -.tsd-sources ul { - list-style: none; - padding: 0; -} - -.tsd-page-toolbar { - position: sticky; - z-index: 1; - top: 0; - left: 0; - width: 100%; - color: var(--color-text); - background: var(--color-background-secondary); - border-bottom: 1px var(--color-accent) solid; - transition: transform 0.3s ease-in-out; -} -.tsd-page-toolbar a { - color: var(--color-text); - text-decoration: none; -} -.tsd-page-toolbar a.title { - font-weight: bold; -} -.tsd-page-toolbar a.title:hover { - text-decoration: underline; -} -.tsd-page-toolbar .tsd-toolbar-contents { - display: flex; - justify-content: space-between; - height: 2.5rem; - margin: 0 auto; -} -.tsd-page-toolbar .table-cell { - position: relative; - white-space: nowrap; - line-height: 40px; -} -.tsd-page-toolbar .table-cell:first-child { - width: 100%; -} -.tsd-page-toolbar .tsd-toolbar-icon { - box-sizing: border-box; - line-height: 0; - padding: 12px 0; -} - -.tsd-widget { - display: inline-block; - overflow: hidden; - opacity: 0.8; - height: 40px; - transition: - opacity 0.1s, - background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-widget:hover { - opacity: 0.9; -} -.tsd-widget.active { - opacity: 1; - background-color: var(--color-accent); -} -.tsd-widget.no-caption { - width: 40px; -} -.tsd-widget.no-caption:before { - margin: 0; -} - -.tsd-widget.options, -.tsd-widget.menu { - display: none; -} -input[type="checkbox"] + .tsd-widget:before { - background-position: -120px 0; -} -input[type="checkbox"]:checked + .tsd-widget:before { - background-position: -160px 0; -} - -img { - max-width: 100%; -} - -.tsd-anchor-icon { - display: inline-flex; - align-items: center; - margin-left: 0.5rem; - vertical-align: middle; - color: var(--color-text); -} - -.tsd-anchor-icon svg { - width: 1em; - height: 1em; - visibility: hidden; -} - -.tsd-anchor-link:hover > .tsd-anchor-icon svg { - visibility: visible; -} - -.deprecated { - text-decoration: line-through !important; -} - -.warning { - padding: 1rem; - color: var(--color-warning-text); - background: var(--color-background-warning); -} - -.tsd-kind-project { - color: var(--color-ts-project); -} -.tsd-kind-module { - color: var(--color-ts-module); -} -.tsd-kind-namespace { - color: var(--color-ts-namespace); -} -.tsd-kind-enum { - color: var(--color-ts-enum); -} -.tsd-kind-enum-member { - color: var(--color-ts-enum-member); -} -.tsd-kind-variable { - color: var(--color-ts-variable); -} -.tsd-kind-function { - color: var(--color-ts-function); -} -.tsd-kind-class { - color: var(--color-ts-class); -} -.tsd-kind-interface { - color: var(--color-ts-interface); -} -.tsd-kind-constructor { - color: var(--color-ts-constructor); -} -.tsd-kind-property { - color: var(--color-ts-property); -} -.tsd-kind-method { - color: var(--color-ts-method); -} -.tsd-kind-call-signature { - color: var(--color-ts-call-signature); -} -.tsd-kind-index-signature { - color: var(--color-ts-index-signature); -} -.tsd-kind-constructor-signature { - color: var(--color-ts-constructor-signature); -} -.tsd-kind-parameter { - color: var(--color-ts-parameter); -} -.tsd-kind-type-literal { - color: var(--color-ts-type-literal); -} -.tsd-kind-type-parameter { - color: var(--color-ts-type-parameter); -} -.tsd-kind-accessor { - color: var(--color-ts-accessor); -} -.tsd-kind-get-signature { - color: var(--color-ts-get-signature); -} -.tsd-kind-set-signature { - color: var(--color-ts-set-signature); -} -.tsd-kind-type-alias { - color: var(--color-ts-type-alias); -} - -/* if we have a kind icon, don't color the text by kind */ -.tsd-kind-icon ~ span { - color: var(--color-text); -} - -* { - scrollbar-width: thin; - scrollbar-color: var(--color-accent) var(--color-icon-background); -} - -*::-webkit-scrollbar { - width: 0.75rem; -} - -*::-webkit-scrollbar-track { - background: var(--color-icon-background); -} - -*::-webkit-scrollbar-thumb { - background-color: var(--color-accent); - border-radius: 999rem; - border: 0.25rem solid var(--color-icon-background); -} - -/* mobile */ -@media (max-width: 769px) { - .tsd-widget.options, - .tsd-widget.menu { - display: inline-block; - } - - .container-main { - display: flex; - } - html .col-content { - float: none; - max-width: 100%; - width: 100%; - } - html .col-sidebar { - position: fixed !important; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - padding: 1.5rem 1.5rem 0 0; - width: 75vw; - visibility: hidden; - background-color: var(--color-background); - transform: translate(100%, 0); - } - html .col-sidebar > *:last-child { - padding-bottom: 20px; - } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); - visibility: hidden; - } - - .to-has-menu .overlay { - animation: fade-in 0.4s; - } - - .to-has-menu .col-sidebar { - animation: pop-in-from-right 0.4s; - } - - .from-has-menu .overlay { - animation: fade-out 0.4s; - } - - .from-has-menu .col-sidebar { - animation: pop-out-to-right 0.4s; - } - - .has-menu body { - overflow: hidden; - } - .has-menu .overlay { - visibility: visible; - } - .has-menu .col-sidebar { - visibility: visible; - transform: translate(0, 0); - display: flex; - flex-direction: column; - gap: 1.5rem; - max-height: 100vh; - padding: 1rem 2rem; - } - .has-menu .tsd-navigation { - max-height: 100%; - } -} - -/* one sidebar */ -@media (min-width: 770px) { - .container-main { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); - grid-template-areas: "sidebar content"; - margin: 2rem auto; - } - - .col-sidebar { - grid-area: sidebar; - } - .col-content { - grid-area: content; - padding: 0 1rem; - } -} -@media (min-width: 770px) and (max-width: 1399px) { - .col-sidebar { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - padding-top: 1rem; - } - .site-menu { - margin-top: 1rem; - } -} - -/* two sidebars */ -@media (min-width: 1200px) { - .container-main { - grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); - grid-template-areas: "sidebar content toc"; - } - - .col-sidebar { - display: contents; - } - - .page-menu { - grid-area: toc; - padding-left: 1rem; - } - .site-menu { - grid-area: sidebar; - } - - .site-menu { - margin-top: 1rem 0; - } - - .page-menu, - .site-menu { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - } -} diff --git a/docs/classes/Events.EventEmitter.html b/docs/classes/Events.EventEmitter.html deleted file mode 100644 index 55c4761..0000000 --- a/docs/classes/Events.EventEmitter.html +++ /dev/null @@ -1,86 +0,0 @@ -EventEmitter | @gobstones/gobstones-core - v0.4.7 -

The EventEmitter class is a minimal observer pattern class definition. -Instances of this class can be created directly, by new EventEmitter() -or it can be used as a base class for custom definitions that require -support for this pattern in order to allow subscription to custom events.

-

The EventEmitter accepts as a type as a EventSignature, that is, -a set of event names together with the expected parameters that the observer -will be called with when the event occurs.

-

Type Parameters

Hierarchy

Constructors

Properties

eventObservers: Map<keyof L, Set<L[keyof L]>> = ...

A map of event to observers for the full time observers.

-
eventOnceObservers: Map<keyof L, Set<L[keyof L]>> = ...

A map of event to observers for the one time observers.

-

Methods

  • Remove all observers to a given event. That is, no observers will be -called when the event is emitted. Wether the observers were one time -observers or full time observers is irrelevant, they are removed anyhow.

    -

    Event if all observers are removed, an observer may subscribe again to -the event afterwards.

    -

    Type Parameters

    • U extends string | number | symbol

    Parameters

    • event: U

      The event that the observers will be removed from.

      -

    Returns EventEmitter<L>

    The event emitter.

    -
  • Add a particular observer to an event in the given map. -If the event does not exists in the map, create it. If it does, add -only the new observer. If the observer is already present for that -event in the given map, do nothing.

    -

    Type Parameters

    • U extends string | number | symbol

    Parameters

    • event: U

      The event to add the observer to.

      -
    • observer: L[U]

      The observer to add.

      -
    • map: Map<U, Set<L[U]>>

      The map to register the event and observer.

      -

    Returns void

  • Remove all entries for an event in the given map. That is, remove the event -itself.

    -

    Type Parameters

    • U extends string | number | symbol

    Parameters

    • event: U

      The event to remove.

      -
    • map: Map<U, Set<L[U]>>

      The map to remove the event from.

      -

    Returns void

  • Emit a particular event, calling all the observers that were registered to -such event in the process, wether they were one time subscribers or -full time subscribers.

    -

    After the emission, one time subscribers are removed as subscribers to the -event, as they should not be called again.

    -

    Type Parameters

    • U extends string | number | symbol

    Parameters

    • event: U

      The event to emit.

      -
    • Rest ...args: Parameters<L[U]>

    Returns void

  • Return a set for the given event. If the event exists in the given map, -return the set of that event. If not, return a new set.

    -

    Type Parameters

    • U extends string | number | symbol

    Parameters

    • event: U

      The event to obtain the set for.

      -
    • map: Map<U, Set<L[U]>>

      The map from where to grab the set from.

      -

    Returns Set<L[U]>

    A set for the given event, a present one, or a new one.

    -
  • Remove an observer from a particular event of this event emitter. That is -make the observer not to be called on future emits. -If the observer is registered as a one time observer or as a full time -observer is not relevant, it's removed anyhow. If an observer that is not -registered is given, nothing happens, and no error is thrown.

    -

    Note that the observer is removed only to the specified event, and such -it may still be registered for other events.

    -

    Type Parameters

    • U extends string | number | symbol

    Parameters

    • event: U

      The event that the observer will be removed from.

      -
    • observer: L[U]

      The observer that will be removed when the event occurs.

      -

    Returns EventEmitter<L>

    The event emitter.

    -
  • Register a observer to a particular event of this event emitter, as a -full time observer, that is, it will be called on the next emit of the -event, and on all the following emits of such event.

    -

    If the observer is already present as a full time observer, it will remain -as a full time observer. If it's a one time observer, it will be transformed -to a full time observer.

    -

    Type Parameters

    • U extends string | number | symbol

    Parameters

    • event: U

      The event that the observer will be registered to.

      -
    • observer: L[U]

      The observer that will be called when the event occurs.

      -

    Returns EventEmitter<L>

    The event emitter.

    -
  • Register a observer to a particular event of this event emitter, as a -one time observer, that is, it will be called on the next emit of the -event, but not on the following emits of such event.

    -

    If the observer is already present as a one time observer, it will remain -as a one time observer. If it's a full time observer, it will be transformed -to a one time observer.

    -

    Type Parameters

    • U extends string | number | symbol

    Parameters

    • event: U

      The event that the observer will be registered to.

      -
    • observer: L[U]

      The observer that will be called when the event occurs.

      -

    Returns EventEmitter<L>

    The event emitter.

    -
  • Remove a particular observer from an event in the given map. -If the observer does not exists in the event for the map, or the event -is not present in the map, do nothing.

    -

    Type Parameters

    • U extends string | number | symbol

    Parameters

    • event: U

      The event to remove the observer from.

      -
    • observer: L[U]

      The observer to be removed.

      -
    • map: Map<U, Set<L[U]>>

      The map to unregister the event and observer.

      -

    Returns void

\ No newline at end of file diff --git a/docs/classes/Expectations.Expectation.html b/docs/classes/Expectations.Expectation.html deleted file mode 100644 index 26a2f72..0000000 --- a/docs/classes/Expectations.Expectation.html +++ /dev/null @@ -1,114 +0,0 @@ -Expectation | @gobstones/gobstones-core - v0.4.7 -

The expectation class is the class that is actually instantiated for -any expectation. It implements all interfaces for expectations, even -the finished expectation ones.

-

Type Parameters

  • T

Hierarchy

Constructors

Properties

element: any

The querying element of this expectation.

-
isNot: boolean

true if this expectation is a negated expectation, that is, -the not property was accessed.

-
result: boolean

The current result of this expectation. Undefined until -the first matcher is run.

-
states: MatcherCall[]

An array of the matchers run in this expectation.

-

Accessors

Methods

  • If the result of the expectation is true, run the given function.

    -

    Parameters

    • action: (() => void)
        • (): void
        • Returns void

    Returns void

  • If the result of the expectation is true, run the first of the functions, -if false, run the second one.

    -

    Parameters

    • actionWhenTrue: (() => void)
        • (): void
        • Returns void

    • actionWhenFalse: (() => void)
        • (): void
        • Returns void

    Returns void

  • Return's the result of the expectancy as a boolean.

    -

    Returns boolean

    true if the value satisfied the expectation, falseotherwise.

    -
  • If the result of the expectation is false, run the given function.

    -

    Parameters

    • action: (() => void)
        • (): void
        • Returns void

    Returns void

  • If the result of the expectation is false, throw the given error.

    -

    Parameters

    • error: Error

    Returns void

  • If the result of the expectation is false, return the given value.

    -

    Type Parameters

    • T

    Parameters

    • value: T

    Returns T

  • Run a matcher with the given name, passing the -querying element as a first argument, and all additional -given arguments. The result of running the matcher is stores, -and a new state is pushed to this particular matcher.

    -

    Parameters

    • matcherName: string

      The matcher name to run

      -
    • args: any[]

      The arguments to pass to the matcher

      -
    • sparse: boolean = true

    Returns Expectation<T>

  • Set the given value as the result of this -expectation. The result is directly set, when -no previous result existed, or joined with a -logic conjunction with the previous result if -a value already exists.

    -

    Parameters

    • value: boolean

    Returns void

    Value

    The value to set.

    -
\ No newline at end of file diff --git a/docs/classes/Expectations.FinishedExpectation.html b/docs/classes/Expectations.FinishedExpectation.html deleted file mode 100644 index ee0511f..0000000 --- a/docs/classes/Expectations.FinishedExpectation.html +++ /dev/null @@ -1,20 +0,0 @@ -FinishedExpectation | @gobstones/gobstones-core - v0.4.7 -

This abstract class provides finished expectation behavior for -all actions based on the fact that it's subclass provides -an implementation for getResult.

-

Hierarchy

Implements

Constructors

Methods

  • If the result of the expectation is true, run the given function.

    -

    Parameters

    • action: (() => void)
        • (): void
        • Returns void

    Returns void

  • If the result of the expectation is true, run the first of the functions, -if false, run the second one.

    -

    Parameters

    • actionWhenTrue: (() => void)
        • (): void
        • Returns void

    • actionWhenFalse: (() => void)
        • (): void
        • Returns void

    Returns void

  • Return's the result of the expectancy as a boolean.

    -

    Returns boolean

    true if the value satisfied the expectation, falseotherwise.

    -
  • If the result of the expectation is false, run the given function.

    -

    Parameters

    • action: (() => void)
        • (): void
        • Returns void

    Returns void

  • If the result of the expectation is false, throw the given error.

    -

    Parameters

    • error: Error

    Returns void

  • If the result of the expectation is false, return the given value.

    -

    Type Parameters

    • T

    Parameters

    • value: T

    Returns T

\ No newline at end of file diff --git a/docs/classes/Expectations.JoinedExpectation.html b/docs/classes/Expectations.JoinedExpectation.html deleted file mode 100644 index 6239104..0000000 --- a/docs/classes/Expectations.JoinedExpectation.html +++ /dev/null @@ -1,28 +0,0 @@ -JoinedExpectation | @gobstones/gobstones-core - v0.4.7 -

A joined expectation consist of multiple expectations joined by a specific -joiner function. A JoinedExpectation implements FinishedExpectation, -where the result is calculated using the given joiner function.

-

Currently two join forms are provided, Expectations!and, -and Expectations!or.

-

Hierarchy

Constructors

Properties

Methods

Constructors

Properties

result: boolean

The result of a joined expectation, set at construction time.

-

Methods

  • If the result of the expectation is true, run the given function.

    -

    Parameters

    • action: (() => void)
        • (): void
        • Returns void

    Returns void

  • If the result of the expectation is true, run the first of the functions, -if false, run the second one.

    -

    Parameters

    • actionWhenTrue: (() => void)
        • (): void
        • Returns void

    • actionWhenFalse: (() => void)
        • (): void
        • Returns void

    Returns void

  • Return's the result of the expectancy as a boolean.

    -

    Returns boolean

    true if the value satisfied the expectation, falseotherwise.

    -
  • If the result of the expectation is false, run the given function.

    -

    Parameters

    • action: (() => void)
        • (): void
        • Returns void

    Returns void

  • If the result of the expectation is false, throw the given error.

    -

    Parameters

    • error: Error

    Returns void

  • If the result of the expectation is false, return the given value.

    -

    Type Parameters

    • T

    Parameters

    • value: T

    Returns T

\ No newline at end of file diff --git a/docs/classes/Expectations.Matchers.html b/docs/classes/Expectations.Matchers.html deleted file mode 100644 index ae3e122..0000000 --- a/docs/classes/Expectations.Matchers.html +++ /dev/null @@ -1,84 +0,0 @@ -Matchers | @gobstones/gobstones-core - v0.4.7 -

This object contains a series of matchers, that is, a series of functions -that can be called with the actual value (and in cases a series of arguments) -and returns a boolean, true if the value satisfies the matcher, and false -otherwise.

-

Having the matchers separated from the instances that use the matchers allow for -greater extensibility.

-

Constructors

Methods

  • Answer if all the element of the actual value satisfy a given criteria.

    -

    Parameters

    • actual: any[]
    • criteria: ((elem) => boolean)
        • (elem): boolean
        • Parameters

          • elem: any

          Returns boolean

    Returns boolean

  • Answer if a given amount of elements of the actual value satisfy a given criteria.

    -

    Parameters

    • actual: any[]
    • amount: number
    • criteria: ((elem) => boolean)
        • (elem): boolean
        • Parameters

          • elem: any

          Returns boolean

    Returns boolean

  • Answer if any of the element of the actual value satisfy a given criteria.

    -

    Parameters

    • actual: any[]
    • criteria: ((elem) => boolean)
        • (elem): boolean
        • Parameters

          • elem: any

          Returns boolean

    Returns boolean

  • Answers if the actual value is the same as expected, using strict compare

    -

    Parameters

    • actual: any
    • expected: any

    Returns boolean

  • Answer if the actual value is between the from and to values (inclusive).

    -

    Parameters

    • actual: number
    • from: number
    • to: number

    Returns boolean

  • Answer if the actual value is close to the expected value, by at least the number -of digits given.

    -

    Parameters

    • actual: number
    • expected: number
    • numDigits: number

    Returns boolean

    Example

    `toBeCloseTo(4.0005, 4.0009, 3)` returns `true`, as there are 3
    digits that are equal between actual and expected.
    If no amount of digits is given, 5 is taken by default. -
    -
  • Answers if the actual value is defined (as in not equal to undefined)

    -

    Parameters

    • actual: any

    Returns boolean

  • Parameters

    • actual: any

    Returns boolean

  • Answer if the actual value is empty.

    -

    Parameters

    • actual: any

    Returns boolean

  • Answers if the actual value is a falsy value

    -

    Parameters

    • actual: any

    Returns boolean

  • Answer if the actual value is greater than the expected value.

    -

    Parameters

    • actual: number
    • expected: number

    Returns boolean

  • Answer if the actual value is greater than or equal than the expected value.

    -

    Parameters

    • actual: number
    • expected: number

    Returns boolean

  • Answer if the actual value is infinity (positive or negative).

    -

    Parameters

    • actual: number

    Returns boolean

  • Answer if the actual element is an instance of a given class (using instanceof).

    -

    Parameters

    • actual: any
    • classConstructor: Function

    Returns boolean

  • Answers if the actual value is the same as expected, using a deep compare mechanism

    -

    Parameters

    • actual: any
    • expected: any

    Returns boolean

  • Answer if the actual value is lower than the expected value.

    -

    Parameters

    • actual: number
    • expected: any

    Returns boolean

  • Answer if the actual value is lower than or equal than the expected value.

    -

    Parameters

    • actual: number
    • expected: number

    Returns boolean

  • Answer if the actual value is not a number.

    -

    Parameters

    • actual: number

    Returns boolean

  • Answers if the actual value is null (strict null, not undefined)

    -

    Parameters

    • actual: any

    Returns boolean

  • Answers if the actual value is a truthy value

    -

    Parameters

    • actual: any

    Returns boolean

  • Answers if the actual value is undefined

    -

    Parameters

    • actual: any

    Returns boolean

  • Answer if the actual value contains the expected element.

    -

    Parameters

    • actual: any[]
    • expected: any

    Returns boolean

  • Answer if the actual value ends with the expected string.

    -

    Parameters

    • actual: string
    • expected: any

    Returns boolean

  • Answer if an object has at least all keys in the least. Combine with -toHaveNoOtherThan to ensure exact key existence

    -

    Parameters

    • actual: any
    • keys: string[]

    Returns boolean

  • Answer if the actual value has a the expected element at a given position. -Returns false if the position does not exist.

    -

    Parameters

    • actual: any[]
    • expected: any
    • position: number

    Returns boolean

  • Answer if the actual value has a length of expected number.

    -

    Parameters

    • actual: any[]
    • expected: number

    Returns boolean

  • Answer if an object has no other than the given keys (although not all given -need to be present). Combine with toHaveAtLeast to ensure exact key existence

    -

    Parameters

    • actual: any
    • keys: string[]

    Returns boolean

  • Answer if the actual element has a property with the given name.

    -

    Parameters

    • actual: any
    • propertyName: string

    Returns boolean

  • Answer if the actual element has the given amount of properties.

    -

    Parameters

    • actual: any
    • amount: number

    Returns boolean

  • Answer if the actual value has expected as a substring.

    -

    Parameters

    • actual: string
    • expected: any

    Returns boolean

  • Answers if the actual value has a type matching the expected type. -This comparison is performed using the typeof operation over the value, -with additional logic added to support 'array' as a type.

    -

    Parameters

    • actual: any
    • expectedType: string

    Returns boolean

    Example

    `toHaveType([1,2,3], 'array')` returns `true` as expected.
    -
    -
  • Answer if the actual value matches the given regexp.

    -

    Parameters

    • actual: string
    • expected: RegExp

    Returns boolean

  • Answer if the actual value starts with the expected string.

    -

    Parameters

    • actual: string
    • expected: any

    Returns boolean

\ No newline at end of file diff --git a/docs/classes/GobstonesLang.Board.html b/docs/classes/GobstonesLang.Board.html deleted file mode 100644 index 6052282..0000000 --- a/docs/classes/GobstonesLang.Board.html +++ /dev/null @@ -1,460 +0,0 @@ -Board | @gobstones/gobstones-core - v0.4.7 -

This class models a Gobstones Board with all it's associated behavior. -Note that an instance of this class implements BoardDefinition, -so it can be used as a valid description of a board in the Gobstones -Interpreter and is -returned by The Gobstones GBB Parser. -All newer developments are expected to use this class instead of a particular ad-hoc -representation for a board.

-

Note that this class provides a board attribute, that used to be the standard -way to access the cells of the boards, but this new class is intended to be used -as an ADT. So it's expected that you use the provided functions for accessing -cells, columns ands rows, instead of using the board attribute. Be aware of -deprecation warnings.

-

The class provides a set of method for accessing and querying the properties -of the board and cell contents, modify the head location, the size and the -cell contents. This class works in conjunction with the Cell class. Note -that internal representation of a board might change, so do not rely on -representation, and abstract away of it as much as possible.

-

Hierarchy

Implements

Constructors

  • Create a new instance of a board. You may choose between a default empty board -with width=4, height=4 and the head at [0,0]. Alternatively pass a custom width -and height, and an optional specific location for the head.

    -

    Optionally and additionally, when creating a custom sized board, you can -initialize some of the cells with some specific stones amount, by providing -an array of CellDataDefinition, specifying the stones of each color for a -given position of the board (There's no specific behavior if two elements -for the same location is given, any of them might be used, -so be sure to specify the stones of a specific location only once).

    -

    Returns Board

    Example: The following example initializes a Board of 5 columns

    by 4 rows, with the head starting in the x=2, y=3 coordinate, and -in which there are 10 red stones in each cell of the firs column.

    -
    new Board(5, 4, [2, 3], [
    {x: 0, y: 0, [Color.Red]: 10},
    {x: 0, y: 1, [Color.Red]: 10},
    {x: 0, y: 2, [Color.Red]: 10},
    {x: 0, y: 3, [Color.Red]: 10}
    ]); -
    -

    Note that when passing CellDataDefinition, the usage of the -Color enum values as keys for specifying the stones amount is -preferred over the 'a', 'n', 'r', 'v' string keys. Although equivalent, -the actual strings of the enum may change is the future.

    -

    Throws

    InvalidBoardDescription if the given width or height - are lower or equal than zero.

    -

    Throws

    InvalidBoardDescription if the given head location - has an x coordinate lower than zero or greater or equal - than the width or an y coordinate lower than zero or - greater or equal than the height.

    -

    Throws

    InvalidBoardDescription if any of the given cell - locations in initialState has a location as an [x, y] - coordinate such that x < 0 || x >= width or - y < 0 || y >= height.

    -
  • Parameters

    Returns Board

Properties

boardData: Cell[][]

The internal representation of the cells of the board. -Currently this is represented as an array of boardWidth -elements, where each element is itself an array of boardHeight -elements, where each of them is a Cell.

-

See

board

-
boardHeight: number

The internal representation of the height of the board

-

See

height

-
boardWidth: number

The internal representation of the width of the board.

-

See

width

-
headXLocation: number

The internal representation of head's X location, where the -position should always comply to:

-
0 <= x < width
-
-

See

head

-
headYLocation: number

The internal representation of head's Y location, where the -position should comply to:

-
0 <= y < height
-
-

See

head

-

Accessors

  • get board(): Cell[][]
  • Obtain the cells of the board as an array of width elements, each -of which is an array of height elements, each of which is a Cell, -or in another sense, a Functions!matrix of Cells.

    -

    This is retain only for compatibility reasons.

    -

    Returns Cell[][]

    A matrix of cells.

    -

    See

    BoardDefinition.board

    -

    Deprecated

    Note that this method of accessing the board is deprecated and should not -be used. If you need a cell matrix, in such a way that the first -array represents the columns, and each array inside the cells of such a column, -the method getColumns should be used. Instead if you are attempting to -access a specific cell as board[x][y], use the getCell method instead as -getCell(x, y).

    -
  • get format(): string
  • The board format. Always: GBB/1.0 as it's derived from the GBB format.

    -

    Returns string

    Deprecated

    In the future, the version information would not be available on a board, -as it's derived from the GBB format, but the way in which this instance -is produces might come from any other location or format other than GBB, -and is not at all relevant to the user.

    -

    See

    BoardDefinition.format

    -
  • get headX(): number
  • The head's X coordinate of this board.

    -

    Returns number

    The board X's coordinate, which satisfies 0 <= x < width

    -
  • get headY(): number
  • The head's Y coordinate of this board

    -

    Returns number

    The board X's coordinate, which satisfies 0 <= y < height

    -
  • get isBoard(): boolean
  • Returns true for any board. -Useful to test if an untyped object is a board.

    -

    Returns boolean

Methods

  • Add a new column to the board at the given direction. -Note that this is equivalent of adding one column -by calling addColumns with argument 1 for the same direction -as given.

    -

    If no direction is given, the column is added to the East.

    -

    Parameters

    • dir: Direction = Direction.East

      The direction where to add the new column.

      -

    Returns void

  • Add a given amount of new columns to the board at the given direction. -Note that, this is equivalent as increasing the size of the board with -changeSizeTo where the new width corresponds to the current width -plus the number of new columns. If the given direction is Direction.East, -then the new columns are added at the beginning of the board (that is, -using changeSizeTo with fromOriginCell as true).

    -

    If no direction is given, the columns are added to the East.

    -

    Parameters

    • amount: number

      The number of columns to add.

      -
    • dir: Direction = Direction.East

      The direction where to add the new column.

      -

    Returns void

  • Add a new row to the board at the given direction. -Note that this is equivalent of adding one row -by calling addRows with argument 1 for the same direction -as given.

    -

    If no direction is given, the row is added to the North.

    -

    Parameters

    • dir: Direction = Direction.North

      The direction where to add the new column.

      -

    Returns void

  • Add a given amount of new rows to the board at the given direction. -Note that, this is equivalent as increasing the size of the board with -changeSizeTo where the new height corresponds to the current height -plus the number of new rows. If the given direction is Direction.South, -then the new columns are added at the beginning of the board (that is, -using changeSizeTo with fromOriginCell as true).

    -

    If no direction is given, the rows are added to the North.

    -

    Parameters

    • amount: number

      The number of rows to add.

      -
    • dir: Direction = Direction.North

      The direction where to add the new row.

      -

    Returns void

  • Remove all observers to a given event. That is, no observers will be -called when the event is emitted. Wether the observers were one time -observers or full time observers is irrelevant, they are removed anyhow.

    -

    Event if all observers are removed, an observer may subscribe again to -the event afterwards.

    -

    Type Parameters

    Parameters

    • event: U

      The event that the observers will be removed from.

      -

    Returns Board

    The event emitter.

    -
  • Change the size of the board to the given width and height. -If fromOriginCorner is true, and cells are being added, they are -added to the West and/or South (depending on the new size value), if -false they are added to the East and/or North. The same happens when removing, -that is, when the new size is lower that the current one, for any of width or -height. -Note that changing the size of the board by setting the width or height -attributes act as using this same method with fromOriginCorner set to false. -Thus, this methods provides a more generic way of modifying the size, allowing to -add columns or rows at the beginning of the board instead of the end.

    -

    Note that if the given size is smaller than the current size, the location -of the head is adjusted in any case that the location falls outside the board -given the new size.

    -

    Parameters

    • width: number

      The new width of the board.

      -
    • height: number

      The new height of the board.

      -
    • fromOriginCorner: boolean = false

      Wether to change the size considering the - change being performed from the origin cell instead of the North-East corner.

      -

    Returns void

    Throws

    InvalidBoardDescription if any of the given - width or height are lower than or equal to zero.

    -
  • Clean the board contents, leaving all cells empty.

    -

    Returns void

  • Clone this board, returning a new one with the same characteristics.

    -

    Returns Board

    A new Board.

    -
  • Emit a particular event, calling all the observers that were registered to -such event in the process, wether they were one time subscribers or -full time subscribers.

    -

    After the emission, one time subscribers are removed as subscribers to the -event, as they should not be called again.

    -

    Type Parameters

    Parameters

    • event: U

      The event to emit.

      -
    • Rest ...args: Parameters<BoardEvents[U]>

    Returns void

  • Filter all the cells of the board, generating an array of Cells. -The order of the cells should not be assumed, as any order might be used.

    -

    Note that with the current implementation, the cells are iterated by column -starting from 0,0 to the one in the North-East corner.

    -

    Parameters

    • f: ((cell, row, column) => boolean)

      A function to apply to each cells. The function expect to receive - the currently iterated cell, and the row and column position for such a cell, - that returns a boolean, returning true if the cell is ought to be in the result, - and falseotherwise.

      -
        • (cell, row, column): boolean
        • Parameters

          • cell: Cell
          • row: number
          • column: number

          Returns boolean

    Returns Cell[]

  • Fold a value over all the cells of a board. -The order of the cells should not be assumed, as any order might be used.

    -

    Note that with the current implementation, the cells are iterated by column -starting from 0,0 to the one in the North-East corner.

    -

    Type Parameters

    • A

    Parameters

    • f: ((previousValue, cell, row, column) => A)

      A function to apply to each cells. The function expect to receive - the current accumulated value at the moment, the currently iterated cell, - and the row and column position for such a cell and returning a value of - the same type as the accumulated value.

      -
        • (previousValue, cell, row, column): A
        • Parameters

          • previousValue: A
          • cell: Cell
          • row: number
          • column: number

          Returns A

    • initialValue: A

      The initial value to fold against.

      -

    Returns A

  • Execute a function over each of the cells of the board. -The order of the cells should not be assumed, as any order might be used.

    -

    Note that with the current implementation, the cells are iterated by column -starting from 0,0 to the one in the North-East corner.

    -

    Parameters

    • f: ((cell, row, column) => void)

      A function to apply to each cells. The function expect to receive - the currently iterated cell, and the row and column position for such a cell.

      -
        • (cell, row, column): void
        • Parameters

          • cell: Cell
          • row: number
          • column: number

          Returns void

    Returns void

  • Get a Cell for the given location, or the cell for the -head location if none is given.

    -

    Returns Cell

    A Cell for the given location.

    -

    Throws

    LocationFallsOutsideBoard with the attempt as ReadCell - if the given cell location as [x, y] has x < 0 || x > width - or y < 0 || y > width.

    -
  • Parameters

    • x: number
    • y: number

    Returns Cell

  • Get an array of Cells for the specific column.

    -

    Parameters

    • columnNumber: number

      The column number to obtain the cell from.

      -

    Returns Cell[]

    A Cell array for the given column.

    -

    Throws

    LocationFallsOutsideBoard with the attempt as ReadColumn - if the given column number is lower than cero or greater than of equal - than the width.

    -
  • Get an array of arrays of Cells for the board, that can be -iterated by column, that is, an array of columns.

    -

    Returns Cell[][]

    A Cell array of arrays where each element is a column, - and each column is a list of cells.

    -
  • Get an array of Cells for the specific row.

    -

    Note that with the current implementation this takes more -time than accessing by column, but this might change in future -implementations.

    -

    Parameters

    • rowNumber: number

      The row number to obtain the cell from.

      -

    Returns Cell[]

    A Cell array for the given row.

    -

    Throws

    LocationFallsOutsideBoard with the attempt as ReadRow - if the given column number is lower than cero or greater of equal - than the height.

    -
  • Get an array of arrays of Cells for the board, that can be -iterated by rows, that is, an array of rows.

    -

    Note that with the current implementation this takes more -time than accessing by column, but this might change in future -implementations.

    -

    Returns Cell[][]

    A Cell array of arrays where each element is a row, - and each row is a list of cells.

    -
  • Change the size of the board to the given width and height.

    -

    Parameters

    • width: number

      The new width of the board.

      -
    • height: number

      The new height of the board.

      -
    • fromOriginCorner: boolean = false

      Wether to change the size considering the - change being performed from the origin cell instead of the North-East corner.

      -
    • attempt: InvalidSizeChangeAttempt

    Returns void

    Warning

    Changing size is an expensive operation with the current implementation, - and probably with any other representation for the current API. All things - considered, changing the size of the Board is not an operation that is - performed multiple time, nor expected immediacy, so the penalties - in performance are acceptable.

    -

    Throws

    InvalidBoardDescription if any of the given - width or height are lower tor equal than zero.

    -
  • Retrieve the cells in a given location.

    -

    Parameters

    • x: number
    • y: number

    Returns Cell

    A cell for the given location

    -

    Throws

    InvalidCellReading with the attempt as ReadCell - if the location given as [x, y] has x that is lower - than zero or greater or equal to the board width, or y - that is lower than zero or greater or equal to the board height.

    -
  • Retrieve all the cells in a given column.

    -

    Parameters

    • column: number

    Returns Cell[]

    An array of cells with the cells in the given column.

    -

    Throws

    InvalidCellReading with the attempt as ReadColumn - if the given column number is lower than zero or greater - or equal to the board width.

    -
  • Retrieve all the columns from the board. This is another way of -saying, retrieve all the cells as a 2 dimensional matrix, where -the outer element corresponds to a column, and the inner one to -the cells in that column.

    -

    Returns Cell[][]

    An array of arrays of cells with the board information

    -
  • Retrieve a two element array with the delta value to move the head to given a -specific direction. The delta is considered using the deltaValue argument, -thus increasing or decreasing by that amount depending on the given direction. -If no deltaValue is given, the delta becomes the maximum possible value for the -given board, that is, the delta between the head location and the border in the -given direction.

    -

    Parameters

    • direction: Direction

      The direction to use to calculate the delta value.

      -
    • Optional deltaValue: number

      The delta number to use when calculating, or undefined if - the maximum available is ought to be used.

      -

    Returns [number, number]

  • Retrieve all the cells in a given row.

    -

    Parameters

    • row: number

    Returns Cell[]

    An array of cells with the cells in the given row.

    -

    Throws

    InvalidCellReading with the attempt as ReadRow - if the given row number is lower than zero or greater - or equal to the board height.

    -
  • Change the head location to the specific cell location.

    -

    Parameters

    Returns void

    Throws

    LocationFallsOutsideBoard with the attempt as performedAction - if the given cell location as [x, y] has x < 0 || x > width - or y < 0 || y > width.

    -
  • Map all the cells of the board, generating a matrix of values. -The order of the cells should not be assumed, as any order might be used.

    -

    Note that with the current implementation, the cells are iterated by column -starting from 0,0 to the one in the North-East corner.

    -

    Type Parameters

    • A

    Parameters

    • f: ((cell, row, column) => A)

      A function to apply to each cells. The function expect to receive - the currently iterated cell, and the row and column position for such a cell, - and returning any value.

      -
        • (cell, row, column): A
        • Parameters

          • cell: Cell
          • row: number
          • column: number

          Returns A

    Returns A[][]

  • Change the head coordinate, by moving the head to the adjacent cell -in the given direction. Thus given a direction dir, and considering -that the head is at [x, y] coordinate, the new head location is calculated as:

    -
      -
    • for dir === Direction.North the new head is at [x, y+1].
    • -
    • for dir === Direction.South the new head is at [x, y-1].
    • -
    • for dir === Direction.East the new head is at [x+1, y].
    • -
    • for dir === Direction.West the new head is at [x-1, y].
    • -
    -

    Parameters

    • dir: Direction

      The direction in which to move the head to.

      -

    Returns void

    Throws

    LocationFallsOutsideBoard with the attempt as Move - if moving the head to the given direction makes it fall - outside the board.

    -
  • Change the head coordinate location to the coordinate at the edge at -given direction. Thus given a direction dir, and considering that -the head is at [x, y] coordinate, the new head coordinate is -calculated as:

    -
      -
    • for dir === Direction.North the new head is at [x, height-1].
    • -
    • for dir === Direction.South the new head is at [x, 0].
    • -
    • for dir === Direction.East the new head is at [width-1, y].
    • -
    • for dir === Direction.West the new head is at [0, y].
    • -
    -

    Parameters

    • dir: Direction

      The direction in which to move the head to.

      -

    Returns void

  • Remove an observer from a particular event of this event emitter. That is -make the observer not to be called on future emits. -If the observer is registered as a one time observer or as a full time -observer is not relevant, it's removed anyhow. If an observer that is not -registered is given, nothing happens, and no error is thrown.

    -

    Note that the observer is removed only to the specified event, and such -it may still be registered for other events.

    -

    Type Parameters

    Parameters

    • event: U

      The event that the observer will be removed from.

      -
    • observer: BoardEvents[U]

      The observer that will be removed when the event occurs.

      -

    Returns Board

    The event emitter.

    -
  • Register a observer to a particular event of this event emitter, as a -full time observer, that is, it will be called on the next emit of the -event, and on all the following emits of such event.

    -

    If the observer is already present as a full time observer, it will remain -as a full time observer. If it's a one time observer, it will be transformed -to a full time observer.

    -

    Type Parameters

    Parameters

    • event: U

      The event that the observer will be registered to.

      -
    • observer: BoardEvents[U]

      The observer that will be called when the event occurs.

      -

    Returns Board

    The event emitter.

    -
  • Register a observer to a particular event of this event emitter, as a -one time observer, that is, it will be called on the next emit of the -event, but not on the following emits of such event.

    -

    If the observer is already present as a one time observer, it will remain -as a one time observer. If it's a full time observer, it will be transformed -to a one time observer.

    -

    Type Parameters

    Parameters

    • event: U

      The event that the observer will be registered to.

      -
    • observer: BoardEvents[U]

      The observer that will be called when the event occurs.

      -

    Returns Board

    The event emitter.

    -
  • Remove a column to the board at the given direction. -Note that this is equivalent to removing one column -by calling removeColumns with argument 1 for the same direction -as given.

    -

    If no direction is given, the column is removed from the East.

    -

    Parameters

    • dir: Direction = Direction.East

      The direction where to remove the new column.

      -

    Returns void

  • Remove given number of columns from the board at the given direction. -Note that, this is equivalent as decreasing the size of the board with -changeSizeTo where the new width corresponds to the current width -minus the number of columns to remove. If the given direction is -Direction.East, then the new columns are removed from the beginning of -the board (that is, using changeSizeTo with fromOriginCell as true).

    -

    If no direction is given, the columns are removed from the East.

    -

    Parameters

    • amount: number

      The amount of columns to remove.

      -
    • dir: Direction = Direction.East

      The direction where to remove the new column.

      -

    Returns void

  • Remove a row to the board at the given direction. -Note that this is equivalent to removing one row -by calling removeRows with argument 1 for the same direction -as given.

    -

    If no direction is given, the row is removed from the North.

    -

    Parameters

    • dir: Direction = Direction.North

      The direction where to remove the new row.

      -

    Returns void

  • Remove given number of rows from the board at the given direction. -Note that, this is equivalent as decreasing the size of the board with -changeSizeTo where the new height corresponds to the current height -minus the number of rows to remove. If the given direction is -Direction.South, then the new columns are removed from the beginning of -the board (that is, using changeSizeTo with fromOriginCell as true).

    -

    If no direction is given, the rows are removed from the North.

    -

    Parameters

    • amount: number

      The amount of rows to remove.

      -
    • dir: Direction = Direction.North

      The direction where to remove the new row.

      -

    Returns void

  • Retrieve a string representation of the board as a pretty print. -Useful for debugging purposes mostly.

    -

    Note that this only pretty prints boards where -there are less than ten stones in each cell. Other board -may print incorrectly.

    -

    Returns string

Events

onHeadMoved: typeof onHeadMoved = ...

This event is thrown whenever an action that alters the position of the head -is performed. Listeners of this action are expected to conform to -OnBoardHeadMovedCallback.

-

The actions that trigger this callback include:

-
    -
  • Setting the head attribute of an instance.
  • -
  • Calling moveHeadTo on an instance with any direction.
  • -
  • Calling moveHeadToEdgeAt on an instance with any direction.
  • -
-

Note however that there is a particular case where the head moves, but this -event is not triggered. Such particular case happens when the board is resized -is such a way that, the location where the head was at, no longer exists as -a valid cell of the board, thus, the head is assigned to a new location. -If you wish to consider such a case, consider also listening to onSizeChanged.

-
onSizeChanged: typeof onSizeChanged = ...

This event is thrown whenever an action that alters the size of the board -is performed. Listeners of this action are expected to conform to -OnBoardSizeChangedCallback

-

The actions that trigger this callback include:

- -
\ No newline at end of file diff --git a/docs/classes/GobstonesLang.BoardError.html b/docs/classes/GobstonesLang.BoardError.html deleted file mode 100644 index 4bc8e63..0000000 --- a/docs/classes/GobstonesLang.BoardError.html +++ /dev/null @@ -1,8 +0,0 @@ -BoardError | @gobstones/gobstones-core - v0.4.7 -

The base class of the error hierarchy that is thrown when -an invalid operation is performed in the Board -class and it's associated Cell.

-

Hierarchy

Constructors

Properties

Constructors

  • Parameters

    • name: string
    • message: string

    Returns BoardError

Properties

isError: boolean

A boolean that specifies the instance as an error. Always true.

-
\ No newline at end of file diff --git a/docs/classes/GobstonesLang.Cell.html b/docs/classes/GobstonesLang.Cell.html deleted file mode 100644 index d3361cf..0000000 --- a/docs/classes/GobstonesLang.Cell.html +++ /dev/null @@ -1,270 +0,0 @@ -Cell | @gobstones/gobstones-core - v0.4.7 -

A cell

-

Hierarchy

Implements

Constructors

  • Create a new instance of a cell with the given cell information. -A cell should be given the Board it belongs to, as a cell cannot exist -without a board. Additionally, at least the [x, y] coordinate of the cell -within the board should be passed as the cell's information, and optionally, -the amount of stones of the different colors in case they are not zero.

    -

    When creating a cell and passing color information, you should prefer using -the Color enum as a key, instead of the enum value as a string.

    -

    Parameters

    • board: Board

      The board this cell belongs to.

      -
    • cellInfo: CellDataDefinition

      The information for this cell, at least the X and Y coordinates, - and optionally, amount of stones for each color.

      -

    Returns Cell

    Example

    new Cell(board, { x: 3, y: 2, [Color.Red]: 5, [Color.Green]: 1 });
    -
    -

    This allows for abstracting away the inner representation of the enum, and allow -for changes in the future without impacting your code.

    -

Properties

blackStones: number

The amount of black stones of this cell.

-
blueStones: number

The amount of blue stones of this cell.

-
board: Board

A reference to the board. A cell cannot exist independently from a Board, -they both know each other and work together to achieve the different actions.

-
greenStones: number

The amount of green stones of this cell.

-
locationX: number

The X coordinate of the location of this cell within the board.

-
locationY: number

The Y coordinate of the location of this cell within the board.

-
redStones: number

The amount of red stones of this cell.

-

Accessors

  • get a(): number
  • Get the amount of blue stones of this cell. -Or instead, set the amount of stones.

    -

    Returns number

    The number of stones of Color.Blue.

    -

    Deprecated

    This is retain only for compatibility reasons. - If you need to access the amount of stones of a color, - use getStonesOf instead, passing the color as an argument. - So the preferred method for blue stones should be - cell.getStonesOf(Color.Blue); - For setting the stones of a color, use setStonesOf instead, - with the color and the new desired value. The preferred way for - blue stones should be: - cell.setStonesOf(Color.Blue, amount);

    -

    Throws

    InvalidStonesAmount with the attempt set to SetStones - if the new amount of stones is lower than zero.

    -
  • set a(value): void
  • Parameters

    • value: number

    Returns void

  • get location(): CellLocation
  • Get the current X, Y coordinate of the cell within the board, -as a two element array in the form [x, y].

    -

    Returns CellLocation

    A two element array with the X and Y location of - this cell within the board.

    -
  • get n(): number
  • Get the amount of black stones of this cell. -Or instead, set the amount of stones.

    -

    Returns number

    The number of stones of Color.Black.

    -

    Deprecated

    This is retain only for compatibility reasons. - If you need to access the amount of stones of a color, - use getStonesOf instead, passing the color as an argument. - So the preferred method for black stones should be - cell.getStonesOf(Color.Black); - For setting the stones of a color, use setStonesOf instead, - with the color and the new desired value. The preferred way for - black stones should be: - cell.setStonesOf(Color.Black, amount);

    -

    Throws

    InvalidStonesAmount with the attempt set to SetStones - if the new amount of stones is lower than zero.

    -
  • set n(value): void
  • Parameters

    • value: number

    Returns void

  • get r(): number
  • Get the amount of red stones of this cell. -Or instead, set the amount of stones.

    -

    Returns number

    The number of stones of Color.Red.

    -

    Deprecated

    This is retain only for compatibility reasons. - If you need to access the amount of stones of a color, - use getStonesOf instead, passing the color as an argument. - So the preferred method for red stones should be - cell.getStonesOf(Color.Red); - For setting the stones of a color, use setStonesOf instead, - with the color and the new desired value. The preferred way for - red stones should be: - cell.setStonesOf(Color.Red, amount);

    -

    Throws

    InvalidStonesAmount with the attempt set to SetStones - if the new amount of stones is lower than zero.

    -
  • set r(value): void
  • Parameters

    • value: number

    Returns void

  • get v(): number
  • Get the amount of green stones of this cell. -Or instead, set the amount of stones.

    -

    Returns number

    The number of stones of Color.Green.

    -

    Deprecated

    This is retain only for compatibility reasons. - If you need to access the amount of stones of a color, - use getStonesOf instead, passing the color as an argument. - So the preferred method for green stones should be - cell.getStonesOf(Color.Green); - For setting the stones of a color, use setStonesOf instead, - with the color and the new desired value. The preferred way for - green stones should be: - cell.setStonesOf(Color.Green, amount);

    -

    Throws

    InvalidStonesAmount with the attempt set to SetStones - if the new amount of stones is lower than zero.

    -
  • set v(value): void
  • Parameters

    • value: number

    Returns void

  • get x(): number
  • Get or set the X location of this cell within the board.

    -

    Returns number

    This cells X coordinate within the board

    -

    Warning

    The getter can be used always. The setter on the other hand - although exported, should not be used, as it's usage is reserved - for internal actions of the board only (It's used exclusively on - recalculating coordinates when the board resizes). Avoid the - setter at all cost.

    -
  • set x(value): void
  • Parameters

    • value: number

    Returns void

  • get y(): number
  • Get or set the Y location of this cell within the board.

    -

    Returns number

    This cells Y coordinate within the board

    -

    Warning

    The getter can be used always. The setter on the other hand - although exported, should not be used, as it's usage is reserved - for internal actions of the board only (It's used exclusively on - recalculating coordinates when the board resizes). Avoid the - setter at all cost.

    -
  • set y(value): void
  • Parameters

    • value: number

    Returns void

Methods

  • Add a given amount of stones of a particular color to this cell.

    -

    Parameters

    • color: Color

      The color of the stones to add to.

      -
    • amount: number = 1

      The amount of stones to add.

      -

    Returns void

    Throws

    InvalidStonesAmount with the attempt set to AddStones - if the new amount of stones is lower or equal than zero.

    -
  • Remove all observers to a given event. That is, no observers will be -called when the event is emitted. Wether the observers were one time -observers or full time observers is irrelevant, they are removed anyhow.

    -

    Event if all observers are removed, an observer may subscribe again to -the event afterwards.

    -

    Type Parameters

    Parameters

    • event: U

      The event that the observers will be removed from.

      -

    Returns Cell

    The event emitter.

    -
  • Clone this cell. Pass a board in order to set the -associated board of the cloned cell to that element.

    -

    Parameters

    Returns Cell

    A new Cell

    -
  • Emit a particular event, calling all the observers that were registered to -such event in the process, wether they were one time subscribers or -full time subscribers.

    -

    After the emission, one time subscribers are removed as subscribers to the -event, as they should not be called again.

    -

    Type Parameters

    Parameters

    • event: U

      The event to emit.

      -
    • Rest ...args: Parameters<CellEvents[U]>

    Returns void

  • Empty the cell, leaving the stone amount for each color to zero.

    -

    Returns void

  • Answer the amount of stones of this cell. That is the total amount of -stones, adding the number of stones of every color.

    -

    Returns number

    The total number of stones of the cell.

    -
  • Answer with the amount of stones of the given color in this cell.

    -

    Parameters

    • color: Color

      The color of the stones to retrieve the amount.

      -

    Returns number

    The amount of stones of the given color.

    -
  • Answer wether this cell has any stones, that is, it has any stones of any color. -In other words, the amount of stones of any color is other than zero.

    -

    Returns boolean

    true if the cell has stones, false otherwise.

    -
  • Answer wether this cell contains stones of the given color. -That is, if the amount of stones of the given color is greater -than zero.

    -

    Parameters

    • color: Color

      The color of the stones to check for existence.

      -

    Returns boolean

    true if the cell has stones of the given color, false otherwise.

    -
  • Retrieve a two element array with the delta value of a neighbor cell to a -specific direction. The delta is considered using the deltaValue argument, -thus increasing or decreasing by that amount depending on the given direction.

    -

    Parameters

    • direction: Direction

      The direction to use to calculate the delta value.

      -
    • deltaValue: number

      The delta number to use when calculating.

      -

    Returns [number, number]

  • Retrieve the amount of stones of a given color for this cell.

    -

    Parameters

    • color: Color

      The color to retrieve the amount of.

      -

    Returns number

  • Set the amount of stones of the given color for this cell, to the given amount.

    -

    Parameters

    • color: Color

      The color of the stones to set.

      -
    • amount: number

      The amount to set the stones of that color.

      -
    • performedAction: StonesChangeActionAttempt

      The attempt to set the error to in case of failure.

      -

    Returns void

    Throws

    InvalidStonesAmount with the given performed action, when the - amount of stones to set is lower than zero.

    -
  • Answer wether this cell is at the border to the given direction -at the board.

    -

    Parameters

    Returns boolean

    true if the cell is at the border to the given direction, false otherwise.

    -
  • Answer wether this cell is empty, that is, it has no stones of any color. -In other words, the amount of stones of any color is zero.

    -

    Returns boolean

    true if the cell is empty, false otherwise.

    -
  • Answer wether this cell is the cell below the head's location -within the board.

    -

    Returns boolean

    true if the cell is below the head's location, false otherwise.

    -
  • Return the neighbor of this cell to the given diagonal, that is, another cell. -If the cell is at the border at the given diagonal, then undefined is returned.

    -

    Parameters

    • vertical: Direction

      The vertical direction to which to get the neighbor from.

      -
    • horizontal: Direction

      The horizontal direction to which to get the neighbor from.

      -

    Returns Cell

    The neighbor cell at the given diagonal, or undefined - if the neighbor does not exist.

    -
  • Return the neighbor of this cell to the given direction, that is, another cell. -If the cell is at the border at the given direction, then undefined is returned.

    -

    Parameters

    • direction: Direction

      The direction to which to get the neighbor from.

      -

    Returns Cell

    The neighbor cell at the given direction, or undefined - if the neighbor does not exist

    -
  • Retrieve all the neighbors of the current cell. Only existing neighbors are -returned. The returned neighbors may be 'orthogonal' (the default), where -only orthogonal neighbors are returned, 'diagonal', where only diagonal -diagonal neighbors are returned, or 'both' where both orthogonal and diagonal -neighbors are returned.

    -

    Parameters

    • location: "orthogonal" | "diagonal" | "both" = 'orthogonal'

      One of 'orthogonal', 'diagonal' or 'both'.

      -

    Returns Cell[]

    A list of neighbors of the current cell.

    -
  • Remove an observer from a particular event of this event emitter. That is -make the observer not to be called on future emits. -If the observer is registered as a one time observer or as a full time -observer is not relevant, it's removed anyhow. If an observer that is not -registered is given, nothing happens, and no error is thrown.

    -

    Note that the observer is removed only to the specified event, and such -it may still be registered for other events.

    -

    Type Parameters

    Parameters

    • event: U

      The event that the observer will be removed from.

      -
    • observer: CellEvents[U]

      The observer that will be removed when the event occurs.

      -

    Returns Cell

    The event emitter.

    -
  • Register a observer to a particular event of this event emitter, as a -full time observer, that is, it will be called on the next emit of the -event, and on all the following emits of such event.

    -

    If the observer is already present as a full time observer, it will remain -as a full time observer. If it's a one time observer, it will be transformed -to a full time observer.

    -

    Type Parameters

    Parameters

    • event: U

      The event that the observer will be registered to.

      -
    • observer: CellEvents[U]

      The observer that will be called when the event occurs.

      -

    Returns Cell

    The event emitter.

    -
  • Register a observer to a particular event of this event emitter, as a -one time observer, that is, it will be called on the next emit of the -event, but not on the following emits of such event.

    -

    If the observer is already present as a one time observer, it will remain -as a one time observer. If it's a full time observer, it will be transformed -to a one time observer.

    -

    Type Parameters

    Parameters

    • event: U

      The event that the observer will be registered to.

      -
    • observer: CellEvents[U]

      The observer that will be called when the event occurs.

      -

    Returns Cell

    The event emitter.

    -
  • Remove a given amount of stones of a particular color to this cell.

    -

    Parameters

    • color: Color

      The color of the stones to remove to.

      -
    • amount: number = 1

      The amount of stones to remove.

      -

    Returns void

    Throws

    InvalidStonesAmount with the attempt set to AddStones - if the new amount of stones is lower or equal than zero, or if the - amount of stones to remove is greater than the amount currently in - the cell.

    -
  • Set the amount of stones of the given color in this cell.

    -

    Parameters

    • color: Color

      The color of the stones to set the amount.

      -
    • amount: number

      The amount of stones to set.

      -

    Returns void

    Throws

    InvalidStonesAmount with the attempt set to SetStones - if the new amount of stones is lower than zero.

    -
  • Retrieve a string representation of the cell, mainly for debugging purposes.

    -

    Returns string

Events

onStonesChanged: typeof onStonesChanged = ...

This event is thrown whenever an action that alters the stones in -the cell is performed. Listeners of this action are expected to conform to -OnCellStonesChanged.

-

The actions that trigger this callback include:

-
    -
  • Setting the a attribute of an instance.
  • -
  • Setting the n attribute of an instance.
  • -
  • Setting the r attribute of an instance.
  • -
  • Setting the v attribute of an instance.
  • -
  • Calling setStonesOf on an instance with any color and value.
  • -
  • Calling addStones on an instance with any color and value.
  • -
  • Calling removeStones on an instance with any color and value.
  • -
  • Calling empty on an instance.
  • -
-
\ No newline at end of file diff --git a/docs/classes/GobstonesLang.Color.html b/docs/classes/GobstonesLang.Color.html deleted file mode 100644 index 2ab0a05..0000000 --- a/docs/classes/GobstonesLang.Color.html +++ /dev/null @@ -1,101 +0,0 @@ -Color | @gobstones/gobstones-core - v0.4.7 -

This enum represent the valid Gobstones Colors. -It provides a set of singleton cases, for each possible value, -as well as static accessors for each case name string (that should -be used as key for representing directions).

-

Additionally it provides handy methods for operations that are common -with colors in Gobstones, such as asking for the first, the last, -the next or the previous.

-

Note that colors are sorted in the following order, from first to last.

-
    -
  • Color.Blue
  • -
  • Color.Black
  • -
  • Color.Red
  • -
  • Color.Green
  • -
-

Always prefer using the provided static names as object keys when needed, -such as:

-
{
[Color.BLUE]: 5,
[Color.BLACK]: 3,
[Color.RED]: 7,
[Color.GREEN]: 0
} -
-

Constructors

Properties

Accessors

Methods

Constructors

  • Create a new instance of a color. This is private, as -colors are already provided in a singleton like pattern.

    -

    Parameters

    • value: string

    Returns Color

Properties

innerValue: string

The internal value of the color.

-
BLACK: "n" = ...

The Black Color internal value.

-
BLUE: "a" = ...

The Blue Color internal value.

-
Black: Color = ...

The Black color. Use whenever a reference to Black is needed.

-
Blue: Color = ...

The Blue color. Use whenever a reference to Blue is needed.

-
GREEN: "v" = ...

The Green Color internal value.

-
Green: Color = ...

The Green color. Use whenever a reference to Green is needed.

-
RED: "r" = ...

The Red Color internal value.

-
Red: Color = ...

The Red color. Use whenever a reference to Red is needed.

-

Accessors

  • get value(): string
  • Private

    The internal value of this element.

    -

    Returns string

Methods

  • The next Color of this color. Colors are sorted -in the following way, from first to last:

    -
      -
    • Color.Blue
    • -
    • Color.Black
    • -
    • Color.Red
    • -
    • Color.Green
    • -
    -

    And they are cyclic, that is, the next color of Green is Blue.

    -

    Returns Color

    The next color of the given one.

    -
  • The next Color of this color. Color are sorted -in the following way, from last to first:

    -
      -
    • Color.Green
    • -
    • Color.Red
    • -
    • Color.Black
    • -
    • Color.Blue
    • -
    -

    And they are cyclic, that is, the previous color of Blue is Green.

    -

    Returns Color

    The previous color of the given one.

    -
  • Returns string

  • Iterate over all the colors, in their defined order, from the smallest, -to the biggest, performing the callback over each color. A function that -expects a color and returns void is expected as an argument.

    -

    Parameters

    • f: ((color) => void)

      The callback to call on each iteration.

      -
        • (color): void
        • Parameters

          Returns void

    Returns void

  • The next Color of a given Color. Colors are sorted -in the following way, from first to last:

    -
      -
    • Color.Blue
    • -
    • Color.Black
    • -
    • Color.Red
    • -
    • Color.Green
    • -
    -

    And they are cyclic, that is, the next color of Green is Blue.

    -

    Parameters

    • color: Color

      The color to obtain the next value from.

      -

    Returns Color

    The next color of the given one.

    -
  • The next Color of a given Color. Color are sorted -in the following way, from last to first:

    -
      -
    • Color.Green
    • -
    • Color.Red
    • -
    • Color.Black
    • -
    • Color.Blue
    • -
    -

    And they are cyclic, that is, the previous color of Blue is Green.

    -

    Parameters

    • color: Color

      The color to obtain the previous value from.

      -

    Returns Color

    The previous color of the given one.

    -
\ No newline at end of file diff --git a/docs/classes/GobstonesLang.Direction.html b/docs/classes/GobstonesLang.Direction.html deleted file mode 100644 index 5ad4717..0000000 --- a/docs/classes/GobstonesLang.Direction.html +++ /dev/null @@ -1,136 +0,0 @@ -Direction | @gobstones/gobstones-core - v0.4.7 -

This class represents the valid Gobstones Directions. -It provides a set of singleton cases, for each possible value, -as well as static accessors for each case name string (that should -be used as key for representing directions).

-

Additionally it provides handy methods for operations that are common -with directions in Gobstones, such as asking for the first, the last, -the next, the previous or the opposite direction.

-

Note that directions are sorted in the following order, from first to last.

-
    -
  • Direction.North
  • -
  • Direction.East
  • -
  • Direction.South
  • -
  • Direction.West
  • -
-

Always prefer using the provided static names as object keys when needed, -such as:

-
{
[Direction.NORTH]: 'Some value',
[Direction.SOUTH]: 'Some other value'
} -
-

Constructors

  • Create a new instance of a direction. This is private, as -directions are already provided in a singleton like pattern.

    -

    Parameters

    • value: string

    Returns Direction

Properties

innerValue: string

The internal value of the direction.

-
EAST: "e" = ...

The East Direction internal value.

-
East: Direction = ...

The East direction. Use whenever a reference to East is needed.

-
NORTH: "n" = ...

The North Direction internal value.

-
North: Direction = ...

The North direction. Use whenever a reference to North is needed.

-
SOUTH: "s" = ...

The South Direction internal value.

-
South: Direction = ...

The South direction. Use whenever a reference to South is needed.

-
WEST: "w" = ...

The West Direction internal value.

-
West: Direction = ...

The West direction. Use whenever a reference to West is needed.

-

Accessors

  • get value(): string
  • Private

    The internal value of this element.

    -

    Returns string

Methods

  • Answer wether or not this direction is horizontal, -that is, one of Direction.East or Direction.West.

    -

    Returns boolean

    true if it's horizontal, false otherwise.

    -
  • Answer wether or not this direction is vertical, -that is, one of Direction.North or Direction.South.

    -

    Returns boolean

    true if it's vertical, false otherwise.

    -
  • The next Direction of this direction. Directions are sorted -in the following way, from first to last:

    -
      -
    • Direction.North
    • -
    • Direction.East
    • -
    • Direction.South
    • -
    • Direction.West
    • -
    -

    And they are cyclic, that is, the next direction of West is North.

    -

    Returns Direction

    The next direction of the given one.

    -
  • The opposite Direction of this one. Directions are opposed -to each other in pairs, those being:

    -
      -
    • Direction.West is opposite to Direction.East and vice versa
    • -
    • Direction.North is opposite to Direction.South and vice versa
    • -
    -

    Returns Direction

    The opposite direction of the given one.

    -
  • The next Direction of this one. Directions are sorted -in the following way, from last to first:

    -
      -
    • Direction.West
    • -
    • Direction.South
    • -
    • Direction.East
    • -
    • Direction.North
    • -
    -

    And they are cyclic, that is, the previous direction of North is West.

    -

    Returns Direction

    The previous direction of the given one.

    -
  • Returns string

  • Iterate over all the directions, in their defined order, from the smallest, -to the biggest, performing the callback over each direction. A function that -expects a direction and returns void is expected as an argument.

    -

    Parameters

    • f: ((dir) => void)

      The callback to call on each iteration.

      -
        • (dir): void
        • Parameters

          Returns void

    Returns void

  • Answer wether or not the given direction is horizontal, -that is, one of Direction.East or Direction.West.

    -

    Parameters

    • dir: Direction

      The direction to find out if it's horizontal.

      -

    Returns boolean

    true if it's horizontal, false otherwise.

    -
  • Answer wether or not the given direction is vertical, -that is, one of Direction.North or Direction.South.

    -

    Parameters

    • dir: Direction

      The direction to find out if it's vertical.

      -

    Returns boolean

    true if it's vertical, false otherwise.

    -
  • The next Direction of a given Direction. Directions are sorted -in the following way, from first to last:

    -
      -
    • Direction.North
    • -
    • Direction.East
    • -
    • Direction.South
    • -
    • Direction.West
    • -
    -

    And they are cyclic, that is, the next direction of West is North.

    -

    Parameters

    • dir: Direction

      The direction to obtain the next value from.

      -

    Returns Direction

    The next direction of the given one.

    -
  • The opposite Direction of a given Direction. Directions are opposed -to each other in pairs, those being:

    -
      -
    • Direction.West is opposite to Direction.East and vice versa
    • -
    • Direction.North is opposite to Direction.South and vice versa
    • -
    -

    Parameters

    • dir: Direction

      The direction to obtain the opposite value from.

      -

    Returns Direction

    The opposite direction of the given one.

    -
  • The next Direction of a given Direction. Directions are sorted -in the following way, from last to first:

    -
      -
    • Direction.West
    • -
    • Direction.South
    • -
    • Direction.East
    • -
    • Direction.North
    • -
    -

    And they are cyclic, that is, the previous direction of North is West.

    -

    Parameters

    • dir: Direction

      The direction to obtain the previous value from.

      -

    Returns Direction

    The previous direction of the given one.

    -
\ No newline at end of file diff --git a/docs/classes/GobstonesLang.InvalidBoardDescription.html b/docs/classes/GobstonesLang.InvalidBoardDescription.html deleted file mode 100644 index c5f5f5f..0000000 --- a/docs/classes/GobstonesLang.InvalidBoardDescription.html +++ /dev/null @@ -1,13 +0,0 @@ -InvalidBoardDescription | @gobstones/gobstones-core - v0.4.7 -

This error is thrown when attempting to create a board -with invalid data.

-

Hierarchy

Constructors

Properties

Constructors

Properties

cellLocation: CellLocation

The cell location attempted to create the board with

-
height: number

The height attempted to create the board with

-
isError: boolean

A boolean that specifies the instance as an error. Always true.

-
width: number

The width attempted to create the board with

-
\ No newline at end of file diff --git a/docs/classes/GobstonesLang.InvalidCellReading.html b/docs/classes/GobstonesLang.InvalidCellReading.html deleted file mode 100644 index 0a26565..0000000 --- a/docs/classes/GobstonesLang.InvalidCellReading.html +++ /dev/null @@ -1,11 +0,0 @@ -InvalidCellReading | @gobstones/gobstones-core - v0.4.7 -

This error is thrown when attempting to read a cell, a -column or a row but an invalid location is given.

-

Hierarchy

Constructors

Properties

Constructors

Properties

The action attempted to be performed

-
failingCoordinate: CellLocation

The coordinate the head was attempted to set into

-
isError: boolean

A boolean that specifies the instance as an error. Always true.

-
\ No newline at end of file diff --git a/docs/classes/GobstonesLang.InvalidSizeChange.html b/docs/classes/GobstonesLang.InvalidSizeChange.html deleted file mode 100644 index c3579fc..0000000 --- a/docs/classes/GobstonesLang.InvalidSizeChange.html +++ /dev/null @@ -1,17 +0,0 @@ -InvalidSizeChange | @gobstones/gobstones-core - v0.4.7 -

This error is thrown when attempting to change the size of the board, -but an invalid size is given

-

Hierarchy

Constructors

Properties

The action attempted to be performed

-
isError: boolean

A boolean that specifies the instance as an error. Always true.

-
newHeight: number

The new height of the board

-
newWidth: number

The new width of the board

-
previousHeight: number

The previous height of the board

-
previousWidth: number

The previous width of the board

-
\ No newline at end of file diff --git a/docs/classes/GobstonesLang.InvalidStonesAmount.html b/docs/classes/GobstonesLang.InvalidStonesAmount.html deleted file mode 100644 index b125a94..0000000 --- a/docs/classes/GobstonesLang.InvalidStonesAmount.html +++ /dev/null @@ -1,15 +0,0 @@ -InvalidStonesAmount | @gobstones/gobstones-core - v0.4.7 -

This error is thrown when attempting to change the stones amount -with an invalid amount of stone (negative amount).

-

Hierarchy

Constructors

Properties

amount: number

The number of stones that was attempted to set

-

The action attempted to be performed

-
color: string

The color of the stones attempted to change

-
isError: boolean

A boolean that specifies the instance as an error. Always true.

-
previousCellState: CellInfo

The state the cell was previously in

-
\ No newline at end of file diff --git a/docs/classes/GobstonesLang.LocationFallsOutsideBoard.html b/docs/classes/GobstonesLang.LocationFallsOutsideBoard.html deleted file mode 100644 index a95b9aa..0000000 --- a/docs/classes/GobstonesLang.LocationFallsOutsideBoard.html +++ /dev/null @@ -1,13 +0,0 @@ -LocationFallsOutsideBoard | @gobstones/gobstones-core - v0.4.7 -

This error is thrown when attempting to move the head, but an -invalid location is given.

-

Hierarchy

Constructors

Properties

The action attempted to be performed

-
failingCoordinate: CellLocation

The coordinate the head was attempted to set into

-
isError: boolean

A boolean that specifies the instance as an error. Always true.

-
previousCoordinate: CellLocation

The previous coordinate the head was in

-
\ No newline at end of file diff --git a/docs/classes/SourceReader.DefinedSourcePosition.html b/docs/classes/SourceReader.DefinedSourcePosition.html deleted file mode 100644 index 9b87509..0000000 --- a/docs/classes/SourceReader.DefinedSourcePosition.html +++ /dev/null @@ -1,157 +0,0 @@ -DefinedSourcePosition | @gobstones/gobstones-core - v0.4.7 -

A DefinedSourcePosition points to a particular position, different from EndOfString, -in a source given by a SourceReader.

-

It provides the right implementation for the operations given by its superclasses.

-

Hierarchy

API: Access

  • get column(): number
  • The column number of this position in the current input.

    -

    Returns number

  • get documentName(): string
  • The name of the input document this position belongs to.

    -

    Returns string

  • get fullDocumentContents(): string
  • The contents of the input document this position belongs to - (both visible and non visible).

    -

    Returns string

  • get line(): number
  • The line number of this position in the current input.

    -

    Returns number

  • get regions(): string[]
  • The regions the position in the current input belongs to.

    -

    Returns string[]

  • get visibleDocumentContents(): string
  • The contents of the visible input document this position belongs to.

    -

    Returns string

  • Answers if this position correspond to the end of document for the -current document of the SourceReader it belongs, or not. -It implements the abstract operation of its superclass. -As this class points to an inner char inside a document, the answer is always false.

    -

    Returns boolean

  • Answers if this position correspond to the end of input of the -SourceReader it belongs, or not. -It implements the abstract operation of its superclass. -As this is a document source position, the answer is always false.

    -

    Returns boolean

  • Answers if this position belongs to some input. -It implements the abstract operation of its superclass.

    -

    Returns boolean

  • Gives a string version of the position. -It is not useful for persistence, as it looses information.

    -

    Returns string

API: Contents Access

  • The exact portion of the source that is enclosed between the from position and this -position (not included), both visible and non visible. - If this does not come after from, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the this position and to -position (not included), both visible and non visible. - If to does not come after this, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITIONS: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the from position and this -position (not included) and is visible. -If this does not come after from, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITIONS: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the this position and -to position (not included) and is visible. -If to does not come after this, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -

Implementation Details

_implementationDetailsForDefPos: string = 'Dummy for documentation'

Instances of DefinedSourcePosition point at some character in an -input document in a particular SourceReader.

-

The abstract operations of DocumentSourcePosition are implemented or reimplemented -with the relevant information.

-

Implementation: Auxiliaries

Implementation: Internal state

_column: number

The column number of this position in the current input. -It will be modified only by the constructor.

-

INVARIANT: 1 <= _column and it is a valid column in that reader.

-
_line: number

The line number of this position in the current input. -It will be modified only by the constructor.

-

INVARIANT: 1 <= _line, and it is a valid line in that reader.

-
_regions: string[]

The regions the position in the current input belongs to. -It will be modified only by the constructor.

-

INVARIANT: the regions are valid in the position's reader.

-
_sourceReader: SourceReader

The SourceReader of the input this position belongs to.

-

Implementation: Protected for Source Reader

  • Private

    Constructs a defined position different from the end of a document in an input source. -It is intended to be used only by SourceReader.

    -

    PRECONDITIONS: (not verified during execution)

    -
      -
    • all numbers are >= 0
    • -
    • numbers are consistent with the reader state
    • -
    -

    Parameters

    • sourceReader: SourceReader
    • line: number
    • column: number
    • regions: string[]
    • documentIndex: number
    • charIndex: number
    • visibleCharIndex: number

    Returns DefinedSourcePosition

  • get _theCharIndex(): number
  • Private

    The index indicating the exact char in the input document in the source input.

    -

    It is supposed to be used only by SourceReader.

    -

    Returns number

  • get _theDocumentIndex(): number
  • Private

    The index indicating the input document in the source input.

    -

    It is supposed to be used only by SourceReader.

    -

    Returns number

  • get _theVisibleCharIndex(): number
  • Private

    The index indicating the exact char in the visible input document in the source input.

    -

    It is supposed to be used only by SourceReader.

    -

    Returns number

\ No newline at end of file diff --git a/docs/classes/SourceReader.DocumentSourcePosition.html b/docs/classes/SourceReader.DocumentSourcePosition.html deleted file mode 100644 index fed0f62..0000000 --- a/docs/classes/SourceReader.DocumentSourcePosition.html +++ /dev/null @@ -1,210 +0,0 @@ -DocumentSourcePosition | @gobstones/gobstones-core - v0.4.7 -

A DocumentSourcePosition points to a particular position, different from EndOfInput, -in a source given by a SourceReader.

-

It provides the right implementation for the operations given by its superclasses, -KnownSourcePosition and SourcePosition. -Additionally, it provides three new operations that only have sense for defined positions:

-
    -
  • documentName, the name of the particular -document in the source input that has the char pointed to by this position,
  • -
  • visibleDocumentContents, the visible -contents of the particular document in the source input that this position points to, -and
  • -
  • fullDocumentContents, the contents -(both visible and non-visible) of the particular document in the source input that this -position point to.
  • -
-

Hierarchy

API: Access

  • get column(): number
  • The column number of this position in the current input.

    -

    Returns number

  • get documentName(): string
  • The name of the input document this position belongs to.

    -

    Returns string

  • get fullDocumentContents(): string
  • The contents of the input document this position belongs to - (both visible and non visible).

    -

    Returns string

  • get line(): number
  • The line number of this position in the current input.

    -

    Returns number

  • get regions(): string[]
  • The regions the position in the current input belongs to.

    -

    Returns string[]

  • get visibleDocumentContents(): string
  • The contents of the visible input document this position belongs to.

    -

    Returns string

  • Answers if this position correspond to the end of document of the current -document in the SourceReader it belongs, or not. -It must be implemented by concrete subclasses.

    -

    Returns boolean

  • Answers if this position correspond to the end of input of the -SourceReader it belongs, or not. -It implements the abstract operation of its superclass. -As this is a document source position, the answer is always false.

    -

    Returns boolean

  • Answers if this position belongs to some input. -It implements the abstract operation of its superclass.

    -

    Returns boolean

  • Gives a string version of the position. -It is NOT useful for persistence, as it looses information. -It must be reimplemented by concrete subclasses.

    -

    Returns string

API: Contents Access

  • The exact portion of the source that is enclosed between the from position and this -position (not included), both visible and non visible. - If this does not come after from, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the this position and to -position (not included), both visible and non visible. - If to does not come after this, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITIONS: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the from position and this -position (not included) and is visible. -If this does not come after from, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITIONS: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the this position and -to position (not included) and is visible. -If to does not come after this, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -

Implementation Details

_implementationDetailsForString: string = 'Dummy for documentation'

The implementation of DocumentSourcePosition stores additional information to locate -the precise position it points to in its SourceReader, to be able to implement all -the required operations. -The values stored are tightly coupled with the implementation in the SourceReader; -they are:

-
    -
  • _documentIndex, with information about -which document in the SourceReader contains the char pointed to by this position, -that is, the current source document,
  • -
  • _charIndex, with information about which -character in the current source document is the char pointed to, and
  • -
  • _visibleCharIndex, with information -about which character in the visible part of the current source document is the one -pointed to (see the SourceReader documentation for explanation on visible parts -of the input). -This information must be provided by the SourceReader during creation, and it will -be accessed by it when calculating sections of the source input in the implementation of -operations -_visibleContentsTo, -_visibleContentsFrom, -_fullContentsTo, and -_fullContentsFrom.
  • -
-

Additionally, it provides three new operations that only have sense for defined positions:

-
    -
  • documentName, the name of the particular -document in the source input that this position points to,
  • -
  • visibleDocumentContents, the -visible contents of the particular document in the source input that this position points -to, and
  • -
  • fullDocumentContents, the contents -(both visible and non-visible) of the particular document in the source input that this -position points to.
  • -
-

Implementation: Auxiliaries

  • Private

    The implementation required by the superclass for the Template Method Pattern that -is used by fullContentsTo.

    -

    PRECONDITION: both positions correspond to the same reader (not verified).

    -

    Parameters

    Returns string

Implementation: Internal state

_charIndex: number

The index with information about the exact char pointed to by this position in the input -document.

-

INVARIANT: 0 <= _charIndex and it is a valid index in that reader.

-
_column: number

The column number of this position in the current input. -It will be modified only by the constructor.

-

INVARIANT: 1 <= _column and it is a valid column in that reader.

-
_documentIndex: number

The index with information about the input document in the _sourceReader.

-

INVARIANT: 0 <= _documentIndex and it is a valid index in that reader.

-
_line: number

The line number of this position in the current input. -It will be modified only by the constructor.

-

INVARIANT: 1 <= _line, and it is a valid line in that reader.

-
_regions: string[]

The regions the position in the current input belongs to. -It will be modified only by the constructor.

-

INVARIANT: the regions are valid in the position's reader.

-
_sourceReader: SourceReader

The SourceReader of the input this position belongs to.

-
_visibleCharIndex: number

The index with information about the exact char pointed to by this position in the visible -input document.

-

INVARIANT: 0 <= _visibleCharIndex and it is a valid index in that reader.

-

Implementation: Protected for Source Reader

  • Private

    Returns a document source position belonging to some SourceReader. -It is intended to be used only by SourceReader.

    -

    PRECONDITIONS: (not verified during execution)

    -
      -
    • all numbers are >= 0
    • -
    • numbers are consistent with the reader state
    • -
    -

    Parameters

    • sourceReader: SourceReader
    • line: number
    • column: number
    • regions: string[]
    • documentIndex: number
    • charIndex: number
    • visibleCharIndex: number

    Returns DocumentSourcePosition

  • get _theCharIndex(): number
  • Private

    The index indicating the exact char in the input document in the source input.

    -

    It is supposed to be used only by SourceReader.

    -

    Returns number

  • get _theDocumentIndex(): number
  • Private

    The index indicating the input document in the source input.

    -

    It is supposed to be used only by SourceReader.

    -

    Returns number

  • get _theVisibleCharIndex(): number
  • Private

    The index indicating the exact char in the visible input document in the source input.

    -

    It is supposed to be used only by SourceReader.

    -

    Returns number

\ No newline at end of file diff --git a/docs/classes/SourceReader.EndOfDocumentSourcePosition.html b/docs/classes/SourceReader.EndOfDocumentSourcePosition.html deleted file mode 100644 index ebf550d..0000000 --- a/docs/classes/SourceReader.EndOfDocumentSourcePosition.html +++ /dev/null @@ -1,160 +0,0 @@ -EndOfDocumentSourcePosition | @gobstones/gobstones-core - v0.4.7 -

An EndOfDocumentSourcePosition points to a position that is right after the last -character in a specific document of a SourceReader. -That position is reached when all characters in the current input document have been processed, -but the source reader has not yet been advanced to the next document. -It is a special position, because it does not point to a particular position inside a document in -the source input, but to the end of one of the documents in it.

-

Hierarchy

API: Access

  • get column(): number
  • The column number of this position in the current input.

    -

    Returns number

  • get documentName(): string
  • The name of the input document this position belongs to.

    -

    Returns string

  • get fullDocumentContents(): string
  • The contents of the input document this position belongs to - (both visible and non visible).

    -

    Returns string

  • get line(): number
  • The line number of this position in the current input.

    -

    Returns number

  • get regions(): string[]
  • The regions the position in the current input belongs to.

    -

    Returns string[]

  • get visibleDocumentContents(): string
  • The contents of the visible input document this position belongs to.

    -

    Returns string

  • Answers if this position is the end of document for some document in a -SourceReader. -It implements the abstract operation of its superclass. -As this class points to the end of document, the answer is always true.

    -

    Returns boolean

  • Answers if this position correspond to the end of input of the -SourceReader it belongs, or not. -It implements the abstract operation of its superclass. -As this is a document source position, the answer is always false.

    -

    Returns boolean

  • Answers if this position belongs to some input. -It implements the abstract operation of its superclass.

    -

    Returns boolean

  • Gives the string representation of end of document positions. -Implements the abstract operation of its superclass.

    -

    Returns string

API: Contents Access

  • The exact portion of the source that is enclosed between the from position and this -position (not included), both visible and non visible. - If this does not come after from, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the this position and to -position (not included), both visible and non visible. - If to does not come after this, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITIONS: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the from position and this -position (not included) and is visible. -If this does not come after from, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITIONS: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the this position and -to position (not included) and is visible. -If to does not come after this, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -

Implementation Details

_implementationDetailsForEndOfDocumentSourcePosition: string = 'Dummy for documentation'

Instances of EndOfDocumentSourcePosition points to a position that is right after -the last character in a specific document in a particular SourceReader.

-

The abstract operations of DocumentSourcePosition are implemented or reimplemented -with the relevant information.

-

Implementation: Auxiliaries

Implementation: Internal state

_column: number

The column number of this position in the current input. -It will be modified only by the constructor.

-

INVARIANT: 1 <= _column and it is a valid column in that reader.

-
_line: number

The line number of this position in the current input. -It will be modified only by the constructor.

-

INVARIANT: 1 <= _line, and it is a valid line in that reader.

-
_regions: string[]

The regions the position in the current input belongs to. -It will be modified only by the constructor.

-

INVARIANT: the regions are valid in the position's reader.

-
_sourceReader: SourceReader

The SourceReader of the input this position belongs to.

-

Implementation: Protected for Source Reader

  • Private

    Constructs an end of document position in an input source. -It is intended to be used only by SourceReader.

    -

    PRECONDITIONS: (not verified during execution)

    -
      -
    • all numbers are >= 0
    • -
    • numbers are consistent with the reader state
    • -
    -

    Parameters

    • sourceReader: SourceReader
    • line: number
    • column: number
    • regions: string[]
    • documentIndex: number
    • charIndex: number
    • visibleCharIndex: number

    Returns EndOfDocumentSourcePosition

  • get _theCharIndex(): number
  • Private

    The index indicating the exact char in the input document in the source input.

    -

    It is supposed to be used only by SourceReader.

    -

    Returns number

  • get _theDocumentIndex(): number
  • Private

    The index indicating the input document in the source input.

    -

    It is supposed to be used only by SourceReader.

    -

    Returns number

  • get _theVisibleCharIndex(): number
  • Private

    The index indicating the exact char in the visible input document in the source input.

    -

    It is supposed to be used only by SourceReader.

    -

    Returns number

\ No newline at end of file diff --git a/docs/classes/SourceReader.EndOfInputSourcePosition.html b/docs/classes/SourceReader.EndOfInputSourcePosition.html deleted file mode 100644 index c072fbd..0000000 --- a/docs/classes/SourceReader.EndOfInputSourcePosition.html +++ /dev/null @@ -1,144 +0,0 @@ -EndOfInputSourcePosition | @gobstones/gobstones-core - v0.4.7 -

An EndOfInputSourcePosition points to the EndOfInput position in a specific -SourceReader. -That position is reached when all input documents have been processed. -It is a special position, because it does not point to a particular position inside a -document in the source input, but to the end of it.

-

Hierarchy

API: Access

  • get column(): number
  • The column number of this position in the current input.

    -

    Returns number

  • get line(): number
  • The line number of this position in the current input.

    -

    Returns number

  • get regions(): string[]
  • The regions the position in the current input belongs to.

    -

    Returns string[]

  • Answers if this position is EndOfInput. -It implements the abstract operation of its superclass.

    -

    Returns boolean

  • Answers if this position belongs to some input. -It implements the abstract operation of its superclass.

    -

    Returns boolean

  • Gives the string representation of EndOfInput positions. -Implements the abstract operation of its superclass.

    -

    Returns string

API: Contents Access

  • The exact portion of the source that is enclosed between the from position and this -position (not included), both visible and non visible. - If this does not come after from, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the this position and to -position (not included), both visible and non visible. - If to does not come after this, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITIONS: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the from position and this -position (not included) and is visible. -If this does not come after from, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITIONS: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the this position and -to position (not included) and is visible. -If to does not come after this, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -

Implementation Details

_implementationDetailsForEndOfInputSourcePosition: string = 'Dummy for documentation'

Instances of EndOfInputSourcePosition point at the EndOfInput of a particular -SourceReader.

-

The abstract operations of KnownSourcePosition are implemented or reimplemented -with the relevant information.

-

Implementation: Auxiliaries

  • Private

    The implementation required by the superclass for the Template Method Pattern that -is used by fullContentsFrom.

    -

    PRECONDITION: both positions correspond to the same reader - (not validated, as it is a protected operation).

    -

    Parameters

    Returns string

  • Private

    The implementation required by the superclass for the Template Method Pattern that -is used by fullContentsTo. -Reading from the EndOfInput always yields the empty string, as it is always the last -position in a source input.

    -

    PRECONDITION: both positions correspond to the same reader - (not validated, as it is a protected operation).

    -

    Parameters

    Returns string

  • Private

    The implementation required by the superclass for the Template Method Pattern that -is used by visibleContentsFrom.

    -

    PRECONDITION: both positions correspond to the same reader - (not validated, as it is a protected operation).

    -

    Parameters

    Returns string

  • Private

    The implementation required by the superclass for the Template Method Pattern that -is used by visibleContentsTo. -Reading from the EndOfInput always yields the empty string, as it is always the last -position in a source input.

    -

    PRECONDITION: both positions correspond to the same reader - (not validated, as it is a protected operation).

    -

    Parameters

    Returns string

Implementation: Internal state

_column: number

The column number of this position in the current input. -It will be modified only by the constructor.

-

INVARIANT: 1 <= _column and it is a valid column in that reader.

-
_line: number

The line number of this position in the current input. -It will be modified only by the constructor.

-

INVARIANT: 1 <= _line, and it is a valid line in that reader.

-
_regions: string[]

The regions the position in the current input belongs to. -It will be modified only by the constructor.

-

INVARIANT: the regions are valid in the position's reader.

-
_sourceReader: SourceReader

The SourceReader of the input this position belongs to.

-

Implementation: Protected for Source Reader

\ No newline at end of file diff --git a/docs/classes/SourceReader.ErrorAtEndOfDocumentBy.html b/docs/classes/SourceReader.ErrorAtEndOfDocumentBy.html deleted file mode 100644 index 281ee72..0000000 --- a/docs/classes/SourceReader.ErrorAtEndOfDocumentBy.html +++ /dev/null @@ -1,7 +0,0 @@ -ErrorAtEndOfDocumentBy | @gobstones/gobstones-core - v0.4.7 -

The error to produce when a function that is not supposed to be used at EndOfDocument is called.

-

Hierarchy

Constructors

Constructors

\ No newline at end of file diff --git a/docs/classes/SourceReader.ErrorAtEndOfInputBy.html b/docs/classes/SourceReader.ErrorAtEndOfInputBy.html deleted file mode 100644 index aedbe52..0000000 --- a/docs/classes/SourceReader.ErrorAtEndOfInputBy.html +++ /dev/null @@ -1,7 +0,0 @@ -ErrorAtEndOfInputBy | @gobstones/gobstones-core - v0.4.7 -

The error to produce when a function that is not supposed to be used at EndOfInput is called.

-

Hierarchy

Constructors

Constructors

\ No newline at end of file diff --git a/docs/classes/SourceReader.ErrorNoInput.html b/docs/classes/SourceReader.ErrorNoInput.html deleted file mode 100644 index b5bfffb..0000000 --- a/docs/classes/SourceReader.ErrorNoInput.html +++ /dev/null @@ -1,5 +0,0 @@ -ErrorNoInput | @gobstones/gobstones-core - v0.4.7 -

The error to produce when a SourceReader is called with no input (an empty object or array).

-

Hierarchy

Constructors

Constructors

\ No newline at end of file diff --git a/docs/classes/SourceReader.ErrorUnmatchingPositionsBy.html b/docs/classes/SourceReader.ErrorUnmatchingPositionsBy.html deleted file mode 100644 index 6bc3d93..0000000 --- a/docs/classes/SourceReader.ErrorUnmatchingPositionsBy.html +++ /dev/null @@ -1,9 +0,0 @@ -ErrorUnmatchingPositionsBy | @gobstones/gobstones-core - v0.4.7 -

The error to produce when two positions related with different readers are used to determine -a portion of the contents.

-

Hierarchy

Constructors

Constructors

\ No newline at end of file diff --git a/docs/classes/SourceReader.KnownSourcePosition.html b/docs/classes/SourceReader.KnownSourcePosition.html deleted file mode 100644 index 176157a..0000000 --- a/docs/classes/SourceReader.KnownSourcePosition.html +++ /dev/null @@ -1,221 +0,0 @@ -KnownSourcePosition | @gobstones/gobstones-core - v0.4.7 -

A KnownSourcePosition points to a position in a specific SourceReader. -It is created using the getPosition operation of a -particular SourceReader instance. -The obtained object indicates a position in the source associated with that reader, that may be -EndOfInput (after all input documents has been processed) or a defined position (that is, one -that corresponds to one of the documents of the input). -This difference is given by subclasses.

-

Valid operations on a KnownSourcePosition, in addition to those of the superclasses, -include:

- -

Hierarchy

API: Access

API: Contents Access

Implementation Details

Implementation: Auxiliaries

Implementation: Internal state

Implementation: Protected for Source Reader

API: Access

  • get column(): number
  • The column number of this position in the current input.

    -

    Returns number

  • get line(): number
  • The line number of this position in the current input.

    -

    Returns number

  • get regions(): string[]
  • The regions the position in the current input belongs to.

    -

    Returns string[]

  • Answers if this position correspond to the end of input of the -SourceReader it belongs, or not. -The EndOfInput is reached when all documents in the source input has been processed. -It must be implemented by concrete subclasses.

    -

    Returns boolean

  • Answers if this position belongs to some input. -It implements the abstract operation of its superclass.

    -

    Returns boolean

  • Gives a string version of the position. -It is NOT useful for persistence, as it looses information. -It must be reimplemented by concrete subclasses.

    -

    Returns string

API: Contents Access

  • The exact portion of the source that is enclosed between the from position and this -position (not included), both visible and non visible. - If this does not come after from, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the this position and to -position (not included), both visible and non visible. - If to does not come after this, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITIONS: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the from position and this -position (not included) and is visible. -If this does not come after from, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITIONS: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -
  • The exact portion of the source that is enclosed between the this position and -to position (not included) and is visible. -If to does not come after this, the result is the empty string.

    -

    The implementation uses the Template Method Pattern, to have a common validation -and specific logic given by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader.

    -

    Parameters

    Returns string

    Throws

    ErrorUnmatchingPositionsBy - if the argument and this do not belong to the same reader.

    -

Implementation Details

_implementationDetailsForKnown: string = 'Dummy for documentation'

Instances of the abstract class KnownSourcePosition point to a particular -SourceReader, given as an argument during construction. -It is remembered in a protected property, -_sourceReader.

-

The abstract operations of SourcePosition are implemented with the relevant -information. -Additionally, there is a new abstract operation, -isEndOfInput to determine if this position is -EndOfInput or Defined.

-

There are four properties with the information about the position: -sourceReader, -line, -column, and -regions. -They are the getters of the protected properties, -_line, -_column, and -_regions.

-

There are also four new operations to determine sections of the source input: -visibleContentsTo, -visibleContentsFrom, -fullContentsTo, and -fullContentsFrom. -They use the Template Method Pattern to provide a common validation and different logics -depending on the subclass. -Protected methods -_validateSourceReaders, -visibleContentsTo , -visibleContentsFrom , -fullContentsTo , and -fullContentsFrom , -are used to implement this Template Method Pattern.

-

The implementation of KnownSourcePosition uses subclasses to distinguish between the -special position EndOfInput, and the rest, defined positions.

-

The information stored about the particular position is:

-
    -
  • _line and -_column, indicating the position in a two dimensional -disposition of the source input, where the line separators depend on the -SourceReader, according to its configuration, and
  • -
  • _regions, a stack of region IDs --- see the SourceReader documentation for explanation on regions in the code.
  • -
-

A KnownSourcePosition works tightly coupled with its SourceReader, as the -source input referred by the position belongs to the latter. -Operations to access the source input uses protected methods of the SourceReader.

-

Implementation: Auxiliaries

  • Private

    The exact portion of the source that is enclosed between from position and this -position (not included), both visible and non-visible. -If from comes after this, the result is the empty string.

    -

    It implements the specific logic of each subclass for the Template Method Pattern -of fullContentsFrom. -It must be reimplemented by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader - (not validated, as it is a protected operation).

    -

    Parameters

    Returns any

  • Private

    The exact portion of the source that is enclosed between this position and to -position (not included), both visible and non-visible. -If this comes after to, the result is the empty string.

    -

    It implements the specific logic of each subclass for the Template Method Pattern -of fullContentsTo. -It must be reimplemented by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader - (not validated, as it is a protected operation).

    -

    Parameters

    Returns any

  • Private

    Validates that both positions correspond to the same reader.

    -

    Implements a common validation for the Template Method Pattern.

    -

    Parameters

    Returns void

    Throws

    ErrorUnmatchingPositionsBy - if this and that positions do not belong to the same reader.

    -
  • Private

    The exact portion of the source that is enclosed between from position and this -position (not included) and is visible. -If from comes after this, the result is the empty string.

    -

    It implements the specific logic of each subclass for the Template Method Pattern -of visibleContentsFrom. -It must be reimplemented by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader - (not validated, as it is a protected operation).

    -

    Parameters

    Returns any

  • Private

    The exact portion of the source that is enclosed between this position and to -position (not included) and is visible. -If this comes after to, the result is the empty string.

    -

    It implements the specific logic of each subclass for the Template Method Pattern -of visibleContentsTo. -It must be reimplemented by subclasses.

    -

    PRECONDITION: both positions correspond to the same reader - (not validated, as it is a protected operation).

    -

    Parameters

    Returns any

Implementation: Internal state

_column: number

The column number of this position in the current input. -It will be modified only by the constructor.

-

INVARIANT: 1 <= _column and it is a valid column in that reader.

-
_line: number

The line number of this position in the current input. -It will be modified only by the constructor.

-

INVARIANT: 1 <= _line, and it is a valid line in that reader.

-
_regions: string[]

The regions the position in the current input belongs to. -It will be modified only by the constructor.

-

INVARIANT: the regions are valid in the position's reader.

-
_sourceReader: SourceReader

The SourceReader of the input this position belongs to.

-

Implementation: Protected for Source Reader

\ No newline at end of file diff --git a/docs/classes/SourceReader.SourcePosition.html b/docs/classes/SourceReader.SourcePosition.html deleted file mode 100644 index f3b20fe..0000000 --- a/docs/classes/SourceReader.SourcePosition.html +++ /dev/null @@ -1,43 +0,0 @@ -SourcePosition | @gobstones/gobstones-core - v0.4.7 -

Instances of SourcePosition point to particular positions in the source given by a -SourceReader. -They may be unknown or they may point to a particular position into a SourceReader. -All SourcePosition are created through SourceReader.

-

Subclasses of SourcePosition determine if the position is known or unknown, and in -the case of being known, which kind of position it is. -The operation isUnknown indicates which is the case. -Additionally, all SourcePosition can be converted to a string, for showing -purposes, with the operation toString. -Subclasses may have other operations, depending on its nature.

-

Valid operations on a SourcePosition include:

-
    -
  • indicate if the position is known or unknown, with -isUnknown, and
  • -
  • produce a string representation of the position for display (not for persistence), -with toString.
  • -
-

A typical use of SourcePosition is relating nodes of an AST representation of code to -particular positions in the string version of the source code (that may come from several input -documents).

-

Hierarchy

Constructors

API: Access

Implementation Details

Constructors

API: Access

  • Answers if this position does not belong to any input. -It must be implemented by concrete subclasses.

    -

    Returns boolean

  • Gives a string version of the position. -It is NOT useful for persistence, as it looses information. -It must be reimplemented by concrete subclasses.

    -

    Returns string

Implementation Details

_implementationDetails: string = 'Dummy for documentation'

Instances of SourcePosition are tightly coupled with SourceReader, because -they determine particular positions in the source input kept by those. -They are created exclusively by a SourceReader, either using the operation -getPosition or by the static const -UnknownPosition of SourceReader.

-

The implementation of the abstract class SourcePosition uses subclasses to -distinguish between unknown positions and known ones. -The method isUnknown is used to distinguish that. -Additionally, the method toString provides a string -version of the position (not suitable for persistance, as it looses information).

-

See the documentation of UnknownSourcePosition and KnownSourcePosition for -additional implementation details.

-
\ No newline at end of file diff --git a/docs/classes/SourceReader.SourceReader.html b/docs/classes/SourceReader.SourceReader.html deleted file mode 100644 index 3873763..0000000 --- a/docs/classes/SourceReader.SourceReader.html +++ /dev/null @@ -1,327 +0,0 @@ -SourceReader | @gobstones/gobstones-core - v0.4.7 -

A SourceReader allows you to read input from some source, either one single document of -content or several named or indexed source documents, in such a way that each character read -registers its position in the source as a tuple index-line-column. -That is, the main problem it solves is that of calculating the position of each character read -by taking into account characters indicating the end-of-line. -It also solves the problem of input divided among several documents, as it is usually the case -with source code, and it provides a couple of additional features:

-
    -
  • to use some parts of the input as extra annotations by marking them as non visible, so the -input can be read as if the annotations were not there, and
  • -
  • to allow the relationship of parts of the input with identifiers naming "regions", thus -making it possible for external tools to identify those parts with ease.
  • -
-

A SourceReader is created using a SourceInput and then SourcePositions, -in particular KnownSourcePositions, can be read from it. -Possible interactions with a SourceReader include:

-
    -
  • peek a character, with SourceReader.peek,
  • -
  • check if a given strings occurs at the beginning of the text in the current document, without -skipping it, with SourceReader.startsWith,
  • -
  • get the current position as a KnownSourcePosition, with -SourceReader.getPosition,
  • -
  • get the current position as a DocumentSourcePosition, with -SourceReader.getDocumentPosition, provided the end of input was not reached,
  • -
  • detect if the end of input was reached, with SourceReader.atEndOfInput,
  • -
  • detect if the end of the current document was reached, with -SourceReader.atEndOfDocument,
  • -
  • skip one or more characters, with skip,
  • -
  • read some characters from the current document based on a condition, with takeWhile, -and
  • -
  • manipulate "regions", with SourceReader.beginRegion -and SourceReader.endRegion. -When reading from sources with multiple documents of input, skipping moves inside a document -until there are no more characters, then an end of document position is reached (a special -position just after the last character of that document), and then a new document is started. -Regions are reset at the beginning of each document. -When the last document has been processed, and the last end of document has been skipped, the -end of input is reached (a special position just after all the documents).
  • -
-

A SourceReader also has a special position, -UnknownPosition, as a static member of the class, -indicating that the position is not known.

-

Characters from the input are classified as either visible or non visible. -Visible characters affect the line and column calculation, and, conversely, non visible -characters do not. -Characters are marked as visible by skipping over them normally; -characters are marked as non visible by silently skip over them. -Visibility of the input affect the information that positions may provide. -When skipping characters, at the end of each of the input document there is a special position -that must be skipped, but that has no character, and thus, cannot be peeked --- the EndOfDocumentSourcePosition. -This position cannot be skipped as non visible, as every input document is known by the user.

-

Regarding regions, a "region" is some part of the input that has an ID (as a string). -It is used in handling automatically generated code. -A typical use is to identify parts of code generated by some external tool, in such a way as to -link that part with the element generating it through region IDs. -Regions are supposed to be nested, so a stack is used, but no check is made on their balance, -being the user responsible for the correct pushing and popping of regions. -When skipping moves from one source document to the next, regions are reset, as regions are not -supposed to cross different documents of the input.

-

Example

-

This is a very basic example using all basic operations. -A more complex program will use functions to organize the access with a logical structure, -and it will also consider different inputs in the source. -Just use this example to understand the behavior of operations --- common usage do NOT follow this structure.

-
 let pos: SourcePosition;
let str: string;
const reader = new SourceReader('program { Poner(Verde) }', '\n');
// ---------------------------------
// Read a basic Gobstones program
if (reader.startsWith('program')) { // ~~> true
pos = reader.getPosition(); // ~~> (1,1) as a SourcePosition, with no regions
// ---------------------------------
// Skip over the first token
reader.skip('program'); // Move 7 chars forward
// ---------------------------------
// Skip whitespaces between tokens
while (reader.startsWith(' ')) // ~~> true 1 time
{ reader.skip(); } // Move 1 char forward (' ')
// ---------------------------------
// Detect block start
if (!reader.startsWith('{')) // ~~> false (function returns true)
{ fail('Block expected'); }
reader.beginRegion('program-body'); // Push 'program-body' to the region stack
str = '';
// ---------------------------------
// Read block body (includes '{')
// NOTE: CANNOT use !startsWith('}') instead because
// !atEndOfDocument() is REQUIRED to guarantee precondition of peek()
while (!reader.atEndOfDocument() // false
&& reader.peek() !== '}') { document false 15 times
str += reader.peek(); // '{', ' ', 'P', ... 'd', 'e', ')', ' '
reader.skip(); // Move 15 times ahead
}
// ---------------------------------
// Detect block end
if (reader.atEndOfDocument()) // ~~> false
{ fail('Unclosed document'); }
// Add '}' to the body
str += reader.peek(); // ~~> '}'
pos = reader.getPosition(); // ~~> (1,24) as a SourcePosition,
// with region 'program-body'
reader.endRegion(); // Pop 'program-body' from the region stack
reader.skip(); // Move 1 char forward ('}')
// ---------------------------------
// Skip whitespaces at the end (none in this example)
while (reader.startsWith(' ')) // ~~> false
{ reader.skip(); } // NOT executed
// ---------------------------------
// Verify there are no more chars at input
if (!reader.atEndOfDocument()) // ~~> false (function returns true)
{ fail('Unexpected document chars after program'); }
reader.skip(); // Skips end of document,
// reaching next document or end of input
// ---------------------------------
// Verify there are no more input documents
if (!reader.atEndOfInput()) // ~~> false (function returns true)
{ fail('Unexpected additional inputs'); }
} -
-

NOTE: as SourceReader.peek is partial, not working at the end of documents, - each of its uses must be done after confirming that SourceReader.atEndOfDocument - is false. - For that reason document is better to use SourceReader.startsWith to verify - if the input starts with some character (or string), when peeking for something - specific.

-

API: Access

  • Answers if there are no more characters to read from the current document.

    -

    Returns boolean

  • Answers if there are no more characters to read from the input.

    -

    Returns boolean

  • Gives the current char of the current input document. -See SourceReader for an example.

    -

    PRECONDITION: !this.atEndOfInput() && !this.atEndOfDocument

    -

    Returns string

    Throws

    ErrorAtEndOfInputBy if the source reader is at EndOfInput in the - current position.

    -

    Throws

    ErrorAtEndOfDocumentBy if the source reader is at EndOfDocument in - the current position.

    -
  • Answers if the current input document at the current char starts with the given string. -It does not split the given string across different input documents -- that is, only the -current input document is checked. -See SourceReader documentation for an example.

    -

    Parameters

    • str: string

      The string to verify the current input, starting at the current char.

      -

    Returns boolean

API: Creation

  • A new SourceReader is created from the given input. -It starts in the first position of the first input document -(if it is empty, starts in the end of document position of that document). -Line enders must be provided, affecting the calculation of line and column for positions. -If there are no line enders, all documents in the source input are assumed as having only -one line.

    -

    PRECONDITION: there is at least one input document.

    -

    Parameters

    • input: SourceInput

      The source input. - See SourceInput for explanation and examples of how to understand - this parameter.

      -
    • lineEnders: string

      A string of which characters will be used to determine the end of a line.

      -

    Returns SourceReader

    Throws

    ErrorNoInput if the arguments are undefined or has no documents.

    -

API: Modification

  • Pushes a region in the stack of regions. -It does not work at the EndOfInput or the EndOfDocument (it does nothing).

    -

    Parameters

    • regionId: string

    Returns void

  • Pops a region from the stack of regions. -It does nothing if there are no regions in the stack.

    -

    Returns void

  • Skips the given number of chars in the input, moving forward. -It may skip documents, considering the end of document as a 'virtual' char.

    -

    If the argument is a string, only its length is used (i.e. its contents are ignored). -Negative numbers do not skip (are equivalent to 0). -At the end of each input document, an additional skip is needed to start the next input -document. -This behavior allows the user to be aware of the ending of documents. -Regions are reset at the end of each documents (the regions stack is emptied).

    -

    If the skipping is silent, line and column do not change, usually because the input being -read was added automatically to the original input (the default is not silent). -If the skip is not silent, the input is visible, and thus it is added to the visible inputs. -The end of each input document cannot be skipped silently, and thus for that particular -position, silently is ignored.

    -

    See SourceReader for an example of visible skips.

    -

    Parameters

    • Optional howMuch: string | number

      An indication of how many characters have to be skipped. - It may be given as a number or as a string. - In this last case, the length of the string is used (the contents - are ignored). - If it is not given, it is assumed 1.

      -
    • silently: boolean = false

      A boolean indicating if the skip must be silent. - If it is not given, it is assumed false, that is, a visible skip. - If the skip is visible, the char is added to the visible input.

      -

    Returns void

  • Skips a variable number of characters on the current string of the input, returning the -characters skipped. -All contiguous characters from the initial position satisfying the predicate are read. -It guarantees that the first character after skipping, if it exists, does not satisfy the -predicate. -It does not go beyond the end of the current document, if starting inside one.

    -

    Parameters

    • contCondition: ((ch) => boolean)

      A predicate on strings, indicating the chars to read.

      -
        • (ch): boolean
        • Parameters

          • ch: string

          Returns boolean

    • silently: boolean = false

      A boolean indicating if the reading must be silent. - If it is not given, it is assumed false, that is, a visible read. - If the read is visible, the char is added to the visible input.

      -

    Returns string

    Result

    The string read from the initial position until the character that do not satisfy the - condition or the end of the current string.

    -

API: Static Elements

UnknownPosition: SourcePosition = ...

A special position indicating that the position is not known.

-

Implementation Details

_implementationDetails: string = 'Dummy for documentation'

The implementation of SourceReader keeps:

-
    -
  • an object associating input document names to input document contents, -_documents,
  • -
  • an object associating input document names to visible input document contents, -_visibleDocumentContents,
  • -
  • an array of the keys of that object for sequential access, -_documentsNames,
  • -
  • an index to the current input document in the array of inputs names, -_documentIndex,
  • -
  • an index to the current visible input document in the array of inputs names -(because it may be different from the document index), -_charIndex,
  • -
  • the current line and column in the current input document, -_line and -_column,
  • -
  • a stack of strings representing the regions' IDs, -_regions, and
  • -
  • the characters used to determine line ends, -_lineEnders.
  • -
-

The object of _documents cannot be empty (with no input -document), and all the SourceInput forms are converted to Record<string, string> -for ease of access. -The _charIndex either points to a valid position in an -input document, or at the end of an input document, or the end of input was reached (that is, -when there are no more input documents to read).

-

Line and column numbers are adjusted depending on which characters are considered as ending a -line, as given by the property _lineEnders, and which -characters are considered visible, as indicating by the user through -skip. -When changing from one document to the next, line and column numbers are reset.

-

The visible input is conformed by those characters of the input that has been skipped -normally. -As visible and non visible characters can be interleaved with no restrictions, it is better -to keep a copy of the visible parts: characters are copied to the visible inputs attribute -when skipped normally. -Visible inputs always have a copy of those characters that have been processed as visible; -unprocessed characters do not appear (yet) on visible inputs.

-

This class is tightly coupled with SourcePosition and its subclasses, because of -instances of that class represent different positions in the source inputs kept by a -SourceReader. -The operations -_documentNameAt, -_visibleDocumentContentsAt, -and _visibleInputFromTo , -_fullDocumentContentsAt, -and _fullInputFromTo, and -the static value _unnamedDocument -are meant to be used only by SourcePosition, to complete their operations, and so -they are grouped as Protected.

-

The remaining auxiliary operations are meant for internal usage, to provide readability or -to avoid code duplication. -The auxiliary operation _cloneRegions is needed because -each new position produced with getPosition need to have -a snapshot of the region stack, and not a mutable reference.

-

Implementation: Auxiliaries

  • Private

    Gives a clone of the stack of regions. -Auxiliary for getPosition. -It is necessary because regions of SourcePosition must correspond to those at that -position and do not change with changes in reader state.

    -

    Returns string[]

  • Private

    Answers if there are more chars in the current document.

    -

    PRECONDITION: this._hasMoreDocuments()

    -

    Returns boolean

  • Private

    Answers if there are more input documents to be read.

    -

    Returns boolean

  • Private

    Gives the contents of either the full or visible input between two positions, -depending on the visible argument. -If from is not before to, the result is the empty string.

    -

    PRECONDITIONS:

    -
      -
    • both positions correspond to this reader (and so are >= 0 -- not verified)
    • -
    -

    Parameters

    Returns string

  • Private

    Answers if the given char is recognized as an end of line indicator, according -to the configuration of the reader.

    -

    Parameters

    • ch: string

    Returns boolean

  • Private

    Skips one char at the input.

    -

    If the skipping is silent, line and column do not change, usually because the input being -read was added automatically to the original input (the default is not silent). -If the skip is not silent, the input is visible, and thus it is added to the visible inputs. -Skip cannot be silent on the EndOfDocument, so at EndOfDocument silent flag is ignored.

    -

    Its used by API operations to skip one or more characters.

    -

    PRECONDITION: !this.atEndOfInput() (not verified)

    -

    Parameters

    • silently: boolean

      A boolean indicating if the skip must be silent.

      -

    Returns void

Implementation: Internal state

_charIndex: number

The current char index in the current input document.

-

INVARIANT: - if _documentIndex < _documentsNames.length - then 0 <= _charIndex < _documents[_documentsNames[_documentIndex]].length

-
_column: number

The current column number in the current input document.

-

INVARIANTS:

-
    -
  • 0 <= _column<
  • -
  • if _documentIndex < _documentsNames.length, - then _column < _documents[_documentsNames[_documentIndex]].length
  • -
-
_documentIndex: number

The current input index. -The current input is that in -_documents[_documentsNames[_documentIndex]] -when _documentIndex < _documentsNames.length.

-

INVARIANT: 0 <= _documentIndex <= _documentsNames.length

-
_documents: Record<string, string>

The actual input, converted to a Record of document names to document contents.

-

INVARIANT: it is always and object (not a string).

-
_documentsNames: string[]

The names with which input documents are identified.

-

INVARIANT: is always equal to Object.keys(_input)

-
_line: number

The current line number in the current input document.

-

INVARIANTS:

-
    -
  • 0 <= _line
  • -
  • if _documentIndex < _documentsNames.length - then _line < _documents[_documentsNames[_documentIndex]].length
  • -
-
_lineEnders: string

The characters used to indicate the end of a line. -These characters affect the calculation of line and column numbers for positions.

-
_regions: string[]

The active regions in the current input document.

-
_visibleDocumentContents: Record<string, string>

A copy of the visible parts of the input documents. -A part is visible if it has been skipped, and that skip was not silent -(see skip).

-

INVARIANTS:

-
    -
  • it has the same keys as _documents
  • -
  • the values of each key are contained in the values of the corresponding key at -_documents
  • -
-

Implementation: Protected for Source Positions

_unnamedDocument: string = 'doc'

The string to use as a name for unnamed input documents. -It is intended to be used only by instances and SourcePosition.

-
  • Private

    Gives the name of the input document at the given index. -It is intended to be used only by SourcePosition.

    -

    PRECONDITION: index <= this._documentsNames.length (not verified) -As it is a protected operation, it is not expectable to receive invalid indexes. -It is not taken into account which are the results if that happens.

    -

    Parameters

    • index: number

    Returns string

  • Private

    Gives the contents of the input document at the given index, -both visible and non-visible. -It is intended to be used only by SourcePosition.

    -

    PRECONDITION: index < this._documentsNames.length (not verified)

    -

    As it is a protected operation, it is not expectable to receive invalid indexes. -It is not taken into account which are the results if that happens.

    -

    Parameters

    • index: number

    Returns string

  • Private

    Gives the contents of the input between two positions. -If from is not before to, the result is the empty string. -It is intended to be used only by SourcePosition.

    -

    PRECONDITION: both positions correspond to this reader (and so are >= 0 -- not verified)

    -

    Returns string

  • Private

    Gives the contents of the visible input document at the given index. -It is intended to be used only by SourcePosition.

    -

    PRECONDITION: index < this._documentsNames.length (not verified).

    -

    As it is a protected operation, it is not expectable to receive invalid indexes. -It is not taken into account which are the results if that happens.

    -

    Parameters

    • index: number

    Returns string

  • Private

    Gives the contents of the visible input between two positions. -If from is not before to, the result is the empty string. -It is intended to be used only by KnownSourcePosition subclasses.

    -

    PRECONDITION: both positions correspond to this reader (and so are >= 0 -- not verified)

    -

    Returns string

\ No newline at end of file diff --git a/docs/classes/SourceReader.SourceReaderError.html b/docs/classes/SourceReader.SourceReaderError.html deleted file mode 100644 index aaa3de9..0000000 --- a/docs/classes/SourceReader.SourceReaderError.html +++ /dev/null @@ -1,13 +0,0 @@ -SourceReaderError | @gobstones/gobstones-core - v0.4.7 -

The superclass for all SourceReader errors. -It provides internationalization of error messages through a Translator. -It also restores the prototype chain, as described in the - Typescript Handbook.

-

Hierarchy

Constructors

Constructors

  • The constructor for generic SourceReader errors.

    -

    Parameters

    • key: string

      A string indicating which of the error entries of the - SourceReaderLocale to use.

      -
    • Optional interpolations: Record<string, any>

      A record indicating values for interpolations - used in the value associated with the key - given. It may be undefined if there are none.

      -

    Returns SourceReaderError

\ No newline at end of file diff --git a/docs/classes/SourceReader.SourceReaderErrorBy.html b/docs/classes/SourceReader.SourceReaderErrorBy.html deleted file mode 100644 index 6ece4e0..0000000 --- a/docs/classes/SourceReader.SourceReaderErrorBy.html +++ /dev/null @@ -1,9 +0,0 @@ -SourceReaderErrorBy | @gobstones/gobstones-core - v0.4.7 -

The superclass for all SourceReader errors with operation and context as -interpolations. -It constructs the corresponding interpolation.

-

Hierarchy

Constructors

Constructors

\ No newline at end of file diff --git a/docs/classes/SourceReader.UnknownSourcePosition.html b/docs/classes/SourceReader.UnknownSourcePosition.html deleted file mode 100644 index 7e78dd8..0000000 --- a/docs/classes/SourceReader.UnknownSourcePosition.html +++ /dev/null @@ -1,25 +0,0 @@ -UnknownSourcePosition | @gobstones/gobstones-core - v0.4.7 -

An unknown source position does not point to any position in any source reader. -It is used when a position must be provided, but no one is known.

-

As source positions are only created by a SourceReader, there is -a static member of it, the UnknownPosition, -with an instance of this class.

-

These positions responds with true to the operation -isUnknown.

-

Hierarchy

API: Access

Implementation Details

Implementation: Protected for Source Reader

API: Access

  • Answers if this position does not belong to any input. -Implements the abstract operation of its superclass.

    -

    Returns boolean

  • Gives the string representation of unknown positions. -Implements the abstract operation of its superclass.

    -

    Returns string

Implementation Details

_implementationDetailsForUnknown: string = 'Dummy for documentation'

Instances of UnknownSourcePosition do not point to a particular SourceReader. -To preserve the property that only a SourceReader can produce source positions, -there is a static const UnknownPosition of -SourceReader that keeps an instance of this class.

-

The implementation just implements the abstract operation of the superclass, with the -proper information.

-

Implementation: Protected for Source Reader

\ No newline at end of file diff --git a/docs/classes/Translator.Translator.html b/docs/classes/Translator.Translator.html deleted file mode 100644 index 795b2a6..0000000 --- a/docs/classes/Translator.Translator.html +++ /dev/null @@ -1,63 +0,0 @@ -Translator | @gobstones/gobstones-core - v0.4.7 -

A Translator consist of an object that hold the state of the current -locale being used, and allows for switching between different locales -and obtain translated strings.

-

The translator expects a locale to be given as the language definition, -and, if constructed with the flatten options, flattens it to allow -dot notation access to the different strings in the locale object.

-

Note that this object does not provide mechanisms for maintaining -multiple languages registered, nor should be used to hold the user defined -language as a state object. Rather, this should be created once, setted -with the desired language, and used always through the full library.

-

Type Parameters

  • TLocale extends Record<string, any>

Constructors

  • Create a new instance of this translator that uses the

    -

    Type Parameters

    • TLocale extends Record<string, any>

    Parameters

    • availableTranslations: Record<string, TLocale>
    • defaultLocale: string
    • shouldFlat: boolean = true
    • Optional currentLocale: string

    Returns Translator<TLocale>

Properties

availableTranslations: Record<string, TLocale>

All the registered translations avaiable.

-
currentLocale: any

The current locale being used. -Types to any, as may be flatten or not.

-
currentLocaleName: string

The current locale name being used.

-
defaultLocale: string

The default locale

-
flatten: boolean

Whether or not use flatten when accessing elements to translate.

-

Methods

  • Get all the available translations

    -

    Returns Record<string, TLocale>

    The default locale.

    -
  • Get the default locale name

    -

    Returns string

    The default locale.

    -
  • Get the current using locale

    -

    Returns string

    The current locale name.

    -
  • Answer wether or not a given locale name is registered.

    -

    Parameters

    • locale: string

      The locale name to check for existence.

      -

    Returns boolean

    true if the locale exists, falseotherwise.

    -
  • Translate a specific key to the currently used locale, by selecting the -corresponding pluralization, determined by the amount given and replacing -any interpolation matchers by the given interpolations. -Pluralization is selected based on the las part of the key in such a form -that it contains the amount as part of the key, or "n" for other number. -.e.g. given the key "test.key" plurals attempt to match "test.key.0", -"test.key.1" and so on, or "test.key.n".

    -

    Parameters

    • amount: number

      The amount given for pluralization

      -
    • key: string

      The key to use to obtain the translated text

      -
    • Optional interpolations: Record<string, any>

      If given, keys of this object will be used - to replace any interpolation matcher in the translated text - (any text in ${}) by the value of the corresponding key.

      -

    Returns string

    A translated string

    -
  • Set the current language to the given locale.

    -

    Parameters

    • locale: string

      A locale to use as the current language.

      -

    Returns void

  • Translate a specific key to the currently used locale, replacing -any interpolation matchers by the given interpolations.

    -

    Parameters

    • key: string

      The key to use to obtain the translated text

      -
    • Optional interpolations: Record<string, any>

      If given, keys of this object will be used - to replace any interpolation matcher in the translated text - (any text in between ${}) by the value of the corresponding key.

      -

    Returns string

    A translated string

    -
\ No newline at end of file diff --git a/docs/classes/Types.BiMap.html b/docs/classes/Types.BiMap.html deleted file mode 100644 index 3e30297..0000000 --- a/docs/classes/Types.BiMap.html +++ /dev/null @@ -1,119 +0,0 @@ -BiMap | @gobstones/gobstones-core - v0.4.7 -

A bidirectional map is a map that represents biyective association between -keys and values, and such that it can be accessed both by the keys or by the -values. The types of both the keys and the values should be comparable by -identity (=== comparison).

-

The order of association is important, so for example a BiMap<string, number> -strings can be accessed by value using numbers, and numbers can accessed by -key using strings.

-

The API of BiMaps resembles that of a Map, but with two versions for each -operation involving keys or values.

-

The operations allow:

-
    -
  • to create one BiMap, with new BiMap (and an optional list of pairs key-value for -initialization -- if some values are associated to more than one key, information is lost),
  • -
  • to ask the number of associations kept by the map, with size,
  • -
  • to delete all associations at once, with clear,
  • -
  • to check that a given key or value has been associated, with hasKey and -hasValue,
  • -
  • to retrieve the value or key associated with a given key or value, with -getByKey and getByValue,
  • -
  • to set a particular association between a key and a value, with -setByKey and setByValue (these operations -imply the other one, and also undo previous associations of the same key and value),
  • -
  • to unset a particular association between a key and a value, with -deleteByKey and deleteByValue (these -operations imply each other),
  • -
  • to produce iterators for the keys, the values, and the entries, with -keys, values, and entries, -and
  • -
  • to produce a string version of a BiMap, with toString.
  • -
-

Instances of BiMap can be iterated directly through for-of loops, which -achieves the same result as iterating through the entries of such BiMap.

-

Implementation details

The implementation of a BiMap is given by two synchronized maps: a straight one, from keys -to values, and a reversed one, from values to keys. -These maps satisfy the invariant that every association in one of them has its reversed -counterpart in the other one. -The auxiliary operations take care of keeping the invariant, by allowing the deletion of a -given key or value in the map where they are values, if they appear there, and the -association of a new pair key-value, deleting the old associations for both, if they exist.

-

Type Parameters

  • K

    The type of the keys.

    -
  • V

    The type of the values.

    -

Constructors

  • Create a new BiMap associating keys to values biyectively.

    -

    An optional list of pairs key-value can be used for initialization, but -if some values are associated to more than one key (that is, the -relationship is not biyective, information is lost -- only the last value -is associated, so the list order is relevant.

    -

    Examples:

    -
      new BiMap([['A', 1],['B',2]])                 -> { 'A' <-> 1, 'B' <-> 2 }
    new BiMap([['A', 1],['B',1]]) -> { 'B' <-> 1 }
    new BiMap([['B', 1],['A',1]]) -> { 'A' <-> 1 }
    new BiMap([['A', 1],['B',1],['B',2]]) -> { 'B' <-> 2 }
    new BiMap([['A', 1],['B',1],['B',2],['C',2]]) -> { 'C' <-> 2 } -
    -

    Type Parameters

    • K

    • V

    Parameters

    • Optional map: [K, V][]

      Optional list of associations to contain in the new BiMap.

      -

    Returns BiMap<K, V>

Properties

mapKV: Map<K, V>

The map from key to values.

-

INVARIANT: for any key k associated with a value v in this map, - v is a key in _mapVK with value k.

-
mapVK: Map<V, K>

The map from values to keys.

-

INVARIANT: for any key v associated with a value k in this map, - k is a key in _mapKV with value v.

-

Manipulation

  • Delete all associations in this BiMap.

    -

    Returns void

  • Delete the association between the given key and its value, if it exists.

    -

    Parameters

    • key: K

      The key to delete its association

      -

    Returns void

  • Delete the association between the given key and its value, if it exists.

    -

    Parameters

    • value: V

      The value to delete its association.

      -

    Returns void

  • Associate the given key to the given value in this BiMap. -If any of both have previous associations, they are lost.

    -

    Parameters

    • key: K

      The key to associate with the value

      -
    • value: V

      The value to associate with the key

      -

    Returns void

  • Associate the given value to the given key in this BiMap. -If any of both have previous associations, they are lost.

    -

    Parameters

    • value: V

      The value to associate with the key

      -
    • key: K

      The key to associate with the value

      -

    Returns void

Printing

  • Return a string representation of this BiMap.

    -

    Returns string

Private

  • Implement the association of a key-value pair biyectively, deleting the -old associations between both the key and the value given.

    -

    Parameters

    • key: K
    • value: V

    Returns void

  • Delete the occurrence of the given key as a value in the reversed map by -retrieving its value from the straight map, if it is associated.

    -

    It may left the BiMap inconsistent, so it MUST NOT be used by itself alone.

    -

    Parameters

    • key: K

    Returns void

  • Delete the occurrence of the given value in the straight map by retrieving -its key from the reversed map, if it is associated.

    -

    It may left the BiMap inconsistent, so it MUST NOT be used by itself alone.

    -

    Parameters

    • value: V

    Returns void

Querying

  • get size(): number
  • Return the number of associations this BiMap has.

    -

    Returns number

    An integer with the number of associations in the map.

    -
  • Retrieve an iterator that can be used in a for-of loop.

    -

    Returns IterableIterator<[K, V]>

  • Return an iterator for the entries of this BiMap, from keys to values.

    -

    Returns [K, V][]

  • Retrieve the value associated with the given key in this BiMap or -undefined if the key is not associated with any value.

    -

    Parameters

    • key: K

      The key to retrieve the associated value

      -

    Returns V

    true if the key is present, false otherwise.

    -
  • Retrieve the key associated with the given value in this BiMap or -undefined if the value is not associated with any key.

    -

    Parameters

    • value: V

      The value to retrieve the associated key

      -

    Returns K

  • Answer if this BiMap has the given key associated with a value.

    -

    Parameters

    • key: K

      The key to search

      -

    Returns boolean

    true if the key is present, false otherwise.

    -
  • Answer if this BiMap has the given value associated with a key.

    -

    Parameters

    • value: V

      The value to search

      -

    Returns boolean

  • Return an iterator for the keys of this BiMap.

    -

    Returns K[]

  • Return an iterator for the values of this BiMap.

    -

    Returns V[]

\ No newline at end of file diff --git a/docs/classes/cli.CLIApp.html b/docs/classes/cli.CLIApp.html deleted file mode 100644 index 721e093..0000000 --- a/docs/classes/cli.CLIApp.html +++ /dev/null @@ -1,88 +0,0 @@ -CLIApp | @gobstones/gobstones-core - v0.4.7 -

The CLIApp class is the class to extend in order to define your CLI based -application.

-

Hierarchy

Constructors

Properties

currentArgs: any[]
currentOptions: any
hasAction: boolean = false
isSubcommand: boolean
onReadErrorMsg: string
options: WithRequired<CLIAppOptions, "flags">
processArgs: string[]

The arguments passed to the application

-
program: Command

Methods

  • Set the action for this command. The action callback receives both the current -command, and the arguments (Note this is one or more arguments, depending -on the command definition. Mandatory or optional positional arguments are -passed first, while the last element consists of the flags passed to the command)

    -

    Parameters

    • f: ((cliapp, ...args) => void)

      The callback to run when this command is called.

      -
        • (cliapp, ...args): void
        • Parameters

          • cliapp: CLIApp
          • Rest ...args: any[]

          Returns void

    Returns CLIApp

  • Define a new sub-command.

    -

    Parameters

    • name: string

      The new sub-command name

      -
    • description: string

      The sub-command description, or translation key if a translator is used.

      -
    • f: ((cmd) => void)

      A callback to construct the newly defined sub-command.

      -

    Returns CLIApp

  • Ensure a condition is met, and if not, show the given error message, -and exit the application with 1.

    -

    Parameters

    • condition: boolean

      The condition that needs to satisfy

      -
    • error: string

    Returns void

  • Exit the application with the given value.

    -

    Parameters

    • value: number

      The value to exit with

      -

    Returns void

  • Retrieve the current user locale, as retrieved from the environment.

    -

    Returns string

  • Retrieve the current user locale, as retrieved from the environment, -or the arguments given by the user.

    -

    Returns string

  • Returns true if the command received no arguments nor flags

    -

    Returns boolean

  • Make this command to be able to read input from a file.

    -

    Parameters

    • description: string

      The input flag description or the translation key if a translator is used.

      -
    • onReadErrorMsg: string

      The error message or translation key if a translator is used.

      -

    Returns CLIApp

  • Add a new option to the command.

    -

    Parameters

    • flags: string

      The flags to trigger this option

      -
    • Optional description: string

      The description or translation key if a translator is used.

      -
    • Optional defaultValue: string | boolean

      A default value.

      -

    Returns CLIApp

  • Make this command to be able to write the output to a file.

    -

    Parameters

    • description: string

      The output flag description or translation key if a translator is used.

      -

    Returns CLIApp

  • Output the command's help if no arguments where given, -then exit the application with 0.

    -

    Returns void

  • Read the input to this command. The input may be the first arguments passed -to a command (without the flags, separated by space) if a mandatory argument -or optional argument was given, or the contents of the -input file if an input was configured.

    -

    Returns string

  • Read the contents of a file. Throws error if -the file does not exist.

    -

    Parameters

    • fileName: string

      The file to read.

      -

    Returns string

  • Run the CLI app. -Call when your CLI app has been completely configured over the main app.

    -

    Returns void

  • Set the correct language for this command

    -

    Parameters

    • Optional language: string

    Returns void

  • Set the language of the given commander app, to the default, or the given one.

    -

    Parameters

    • cmd: Command

      The command to set to.

      -

    Returns void

  • Validate that the given language flag, if any, is a valid translation

    -

    Parameters

    • locale: string

    Returns void

  • Write the given data to the standard output, or, to the expected file, -if an output was configured. Note that when outputting to a file, if the -file does not exists, it gets created. If it already exists, then the -output is appended to the previously defined contents of that file.

    -

    Parameters

    • data: string

      The data to output

      -

    Returns void

  • Write a set of contents to the standard output.

    -

    Parameters

    • contents: string

      The contents to write.

      -

    Returns void

  • Write a set of contents to a given file.

    -

    Parameters

    • fileName: string

      The file to write to.

      -
    • contents: string

      The contents to write.

      -

    Returns void

\ No newline at end of file diff --git a/docs/classes/cli.CLICommandBuilder.html b/docs/classes/cli.CLICommandBuilder.html deleted file mode 100644 index e3dcdb6..0000000 --- a/docs/classes/cli.CLICommandBuilder.html +++ /dev/null @@ -1,80 +0,0 @@ -CLICommandBuilder | @gobstones/gobstones-core - v0.4.7 -

A builder for a CLI command. May be the main command of the app (CLIApp) -extends this class) or a sub-command.

-

Hierarchy

Constructors

Properties

currentArgs: any[]
currentOptions: any
hasAction: boolean = false
isSubcommand: boolean
onReadErrorMsg: string
options: WithRequired<CLIAppOptions, "flags">
program: Command
LONG_HELP_FLAG: string = '--help'
LONG_INPUT_FLAG: string = '--in'
LONG_LANG_FLAG: string = '--language'
LONG_OUTPUT_FLAG: string = '--out'
LONG_VERSION_FLAG: string = '--version'
SHORT_HELP_FLAG: string = '-h'
SHORT_INPUT_FLAG: string = '-i'
SHORT_LANG_FLAG: string = '-l'
SHORT_OUTPUT_FLAG: string = '-o'
SHORT_VERSION_FLAG: string = '-v'

Methods

  • Set the action for this command. The action callback receives both the current -command, and the arguments (Note this is one or more arguments, depending -on the command definition. Mandatory or optional positional arguments are -passed first, while the last element consists of the flags passed to the command)

    -

    Parameters

    • f: ((cliapp, ...args) => void)

      The callback to run when this command is called.

      -
        • (cliapp, ...args): void
        • Parameters

          Returns void

    Returns CLICommandBuilder

  • Ensure a condition is met, and if not, show the given error message, -and exit the application with 1.

    -

    Parameters

    • condition: boolean

      The condition that needs to satisfy

      -
    • error: string

    Returns void

  • Exit the application with the given value.

    -

    Parameters

    • value: number

      The value to exit with

      -

    Returns void

  • Returns true if the command received no arguments nor flags

    -

    Returns boolean

  • Make this command to be able to read input from a file.

    -

    Parameters

    • description: string

      The input flag description or the translation key if a translator is used.

      -
    • onReadErrorMsg: string

      The error message or translation key if a translator is used.

      -

    Returns CLICommandBuilder

  • Add a new option to the command.

    -

    Parameters

    • flags: string

      The flags to trigger this option

      -
    • Optional description: string

      The description or translation key if a translator is used.

      -
    • Optional defaultValue: string | boolean

      A default value.

      -

    Returns CLICommandBuilder

  • Make this command to be able to write the output to a file.

    -

    Parameters

    • description: string

      The output flag description or translation key if a translator is used.

      -

    Returns CLICommandBuilder

  • Output the command help.

    -

    Returns void

  • Output the command's help if no arguments where given, -then exit the application with 0.

    -

    Returns void

  • Read the input to this command. The input may be the first arguments passed -to a command (without the flags, separated by space) if a mandatory argument -or optional argument was given, or the contents of the -input file if an input was configured.

    -

    Returns string

  • Read the contents of a file. Throws error if -the file does not exist.

    -

    Parameters

    • fileName: string

      The file to read.

      -

    Returns string

  • Set the correct language for this command

    -

    Parameters

    • Optional language: string

    Returns void

  • Validate that the given language flag, if any, is a valid translation

    -

    Parameters

    • locale: string

    Returns void

  • Write the given data to the standard output, or, to the expected file, -if an output was configured. Note that when outputting to a file, if the -file does not exists, it gets created. If it already exists, then the -output is appended to the previously defined contents of that file.

    -

    Parameters

    • data: string

      The data to output

      -

    Returns void

  • Write a set of contents to the standard output.

    -

    Parameters

    • contents: string

      The contents to write.

      -

    Returns void

  • Write a set of contents to a given file.

    -

    Parameters

    • fileName: string

      The file to write to.

      -
    • contents: string

      The contents to write.

      -

    Returns void

\ No newline at end of file diff --git a/docs/docs/globals.html b/docs/docs/globals.html deleted file mode 100644 index e11b1ff..0000000 --- a/docs/docs/globals.html +++ /dev/null @@ -1,25 +0,0 @@ -@gobstones/gobstones-core - v0.4.7 -

@gobstones/gobstones-core - v0.4.7

gobstones-core

A set of utility types, interfaces and classes that are used through all the Gobstones Platform repositories.

-

Licence Version API Docs

-

GitHub Workflow Tests GitHub Workflow Build

-

Install

Install with npm by using

-
npm install @gobstones/gobstones-core
-
-

Usage

Unless you are developing a library for the Gobstones Platform you probably won't need to use this library directly, as many of the elements in this library are re-exported by other tools. If you are however interesting in using this library directly or you are effectively developing things in the Gobstones Platform, there are several ways how you can use this library.

-

Main module

The main module is @gobstones/gobstones-core and contains useful classes and abstraction to -most code usage in Gobstones. Currently some of the exported utilities are:

-
    -
  • Board related classes and interfaces (Board, Cell, Color, Direction)
  • -
  • Expectations (The expect function and all it's associated matchers)
  • -
  • Translator (Mainly the translator class and it's associated behavior)
  • -
  • SourceReader (A class to solve the problem of locating characters in source input)
  • -
  • helper tools (Such as a tool for creating matrices, a deepEqual comparison, and tools to flatten/unflatten an object)
  • -
-

Just import then from the main module the tools you want. Check the API for more information on what is exported and how it works.

-
import { Board } from '@gobstones/gobstones-core';
import { expect } from '@gobstones/gobstones-core';
import { SourceInput, SourceReader } from '@gobstones/gobstones-core'; -
-

CLI Module

The CLI module provides tools for constructing a CLI application. It resides on the /cli submodule. It exports mainly the cli type and function. Import it as follows:

-
import { cli } from '@gobstones/gobstones-core/cli';
-
-

Contributing

See the Gobstones Platform Contributions Guidelines to contribute.

-
\ No newline at end of file diff --git a/docs/favicon.ico b/docs/favicon.ico deleted file mode 100644 index 8ba34262d57bee4c00730d480da03c186b3c49f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41893 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 diff --git a/docs/functions/Expectations.and.html b/docs/functions/Expectations.and.html deleted file mode 100644 index 99844f7..0000000 --- a/docs/functions/Expectations.and.html +++ /dev/null @@ -1,7 +0,0 @@ -and | @gobstones/gobstones-core - v0.4.7 -
  • Create a new JoinedExpectation where all the expectations need to -have a true result in order for the result of the joined one to be also -true. That is, an expectation that joins it's components with a logical and.

    -

    Parameters

    • Rest ...expectations: IFinishedExpectation[]

      A list of expectations that need to be fulfilled in order to - return true as result.

      -

    Returns IFinishedExpectation

\ No newline at end of file diff --git a/docs/functions/Expectations.expect.html b/docs/functions/Expectations.expect.html deleted file mode 100644 index d43a969..0000000 --- a/docs/functions/Expectations.expect.html +++ /dev/null @@ -1,57 +0,0 @@ -expect | @gobstones/gobstones-core - v0.4.7 -
\ No newline at end of file diff --git a/docs/functions/Expectations.or.html b/docs/functions/Expectations.or.html deleted file mode 100644 index fc81d7e..0000000 --- a/docs/functions/Expectations.or.html +++ /dev/null @@ -1,7 +0,0 @@ -or | @gobstones/gobstones-core - v0.4.7 -
  • Create a new JoinedExpectation where any of the expectations need to -have a true result in order for the result of the joined one to be also -true. That is, an expectation that joins it's components with a logical or.

    -

    Parameters

    • Rest ...expectations: IFinishedExpectation[]

      A list of expectations where one need to be fulfilled in order to - return true as result.

      -

    Returns IFinishedExpectation

\ No newline at end of file diff --git a/docs/functions/Functions.deepEquals.html b/docs/functions/Functions.deepEquals.html deleted file mode 100644 index 739ab1a..0000000 --- a/docs/functions/Functions.deepEquals.html +++ /dev/null @@ -1,39 +0,0 @@ -deepEquals | @gobstones/gobstones-core - v0.4.7 -
  • Answer wether or not two elements are semantically equal, considering them -equal when they have the same type and all their internal elements are -the same, or when they represent the same concept (two regular expressions -that match the same string, two dates for the same moment, two sets with same -elements in it, and so on).

    -

    The function is intended for comparison of basic types, simple non classed -objects, arrays, and built-in basic classed objects such as Set, Map, RegExp, -Date, Buffer and Error.

    -

    Most simple cases should return true as expected, such as:

    -
      -
    • deepEquals(1, 1.0)
    • -
    • deepEquals({a: 1, b: {c: 3, d: 4}}, {b: {c: 3, d: 4}, a: 1})
    • -
    • deepEquals([1,2,3], [1, 1+1, 2+1])
    • -
    • deepEquals(new Set([1,2,3]), new Set([3,2,1]))
    • -
    -

    There is one special case, that we support and that might not be expected -in standard TS/JS behavior, which is NaN comparison. Here you might find -that deepEquals(NaN, NaN) is true, even though in JS NaN is not equal -to anything, even itself.

    -

    Note that parameters are statically typed when running in TypeScript, -thus not allowing for things such as deepEquals(4, '4.0') to be typed, -unless explicitly casted away. In that case even, the comparison is performed -not considering type coercion, thus, returning false.

    -

    Note that deep equality is costly, and should be avoided whenever possible. Yet -is some scenarios, it may be useful to count with such a function. In that sense, -we provide a 'cheap' (in terms of dependency overhead) alternative to most -third-party implementations, that can be used through the whole project.

    -

    The implementation is kind of ugly and heavily procedural. The idea behind the -code is to return a result as fast as possible, for performance reasons. Also -note that it might not consider the most edgy cases. If you have trouble with a -specific case, please consider sending a Pull Request or raising an Issue in -this project's repository.

    -

    If you want to see all supported and unsupported cases, we recommend you to check -out the test cases.

    -

    Type Parameters

    • T

    Parameters

    • first: T

      The element to compare to.

      -
    • second: T

      The element to compare against.

      -

    Returns boolean

    true if both elements are equal, false otherwise.

    -
\ No newline at end of file diff --git a/docs/functions/Functions.deepStringAssign.html b/docs/functions/Functions.deepStringAssign.html deleted file mode 100644 index a2d0f89..0000000 --- a/docs/functions/Functions.deepStringAssign.html +++ /dev/null @@ -1,27 +0,0 @@ -deepStringAssign | @gobstones/gobstones-core - v0.4.7 -
  • It returns a copy of the target object, where its string keys has been overwritten with -the corresponding keys of the sources objects, when they are present, recursively. -If the same key appears in more than one of the source objects, the last one is used. -If none of the objects has the key, or the key is not of string type, it is not changed. -It does not affect the target, nor the sources.

    -

    This function is inspired by Object.assign, but it is parametric, so the type of the -target is preserved. -The sources of changes contains subsets of the keys of the target object, and only those -are overwritten (if their values have type string).

    -

    Different from the Object.assign function, deepStringAssign works by cloning the -target object, and rewriting the corresponding keys with the values from the sources. -This work is needed for the function to be used on existing constants without altering them. -The function Object.assign can be used on an empty object, and all options can be assigned, -but in that way, the type of the original object is lost (objects with any combination of keys -may be created). -The function deepStringAssign uses a copy of the target object, so all its keys are -preserved, and only those can be overwritten.

    -

    Its intended use is to provide a way to override defaults in words definitions.

    -

    EXAMPLE:

    -
       interface A {
    a1: string;
    a2: {
    a21: string;
    a22: string;
    };
    }
    const defaultA: A = { a1: 'Default A1', a2: { a21: 'Default A21', a22: 'Default A22' } };
    const ej1: A = deepStringAssign<A>(defaultA, { a2: { a21: 'User A21' } });
    // EXPECTED: ej1 === { a1: 'Default A1', a2: { a21: 'User A21', a22: 'Default A22' } };
    const ej2: A = deepStringAssign<A>(defaultA, { a1: 'User A1' },
    { a2: { a22: 'User A22' } });
    // EXPECTED: ej2 === { a1: 'User A1', a2: { a21: 'Default A21', a22: 'User A22' } }; -
    -

    PRECONDITION: the keys of the objects have compatible types (that is, T is not just object).

    -

    Type Parameters

    • T extends object

    Parameters

    • target: T

      An object that provides the default values for the fields of the result.

      -
    • Rest ...sources: Subset<T>[]

      A span parameter with objects possibly containing values to replace the defaults - in string keys with strings as values.

      -

    Returns T

\ No newline at end of file diff --git a/docs/functions/Functions.flatten.html b/docs/functions/Functions.flatten.html deleted file mode 100644 index ec97f5e..0000000 --- a/docs/functions/Functions.flatten.html +++ /dev/null @@ -1,13 +0,0 @@ -flatten | @gobstones/gobstones-core - v0.4.7 -
  • Flatten the given object. -Given an object with nested elements, it returns an object that has been flattened, -that is, where the keys are string that represent the nested route to follow -in the original object to access the leaves.

    -

    Type Parameters

    • TTarget extends Record<string, any>

    • TResult extends Record<string, any>

    Parameters

    • target: TTarget

      The element to flatten.

      -
    • options: FlattenOptions = {}

      The option to flatten.

      -

    Returns TResult

    Example

    flatten({
    a: {
    a1: 1,
    a2: 2
    },
    b: {
    b1: {
    b1i: 'hello',
    b1ii: 'world'
    }
    }
    });
    // this will yield:
    {
    'a.a1': 1,
    'a.a2': 2,
    'b.b1.b1i': 'hello',
    'b.b1.b1ii': 'world'
    } -
    -

    Additional options may be passed, such as which character is used as a delimiter, -or the maximum depth level.

    -

    For an inverse operation see unflatten.

    -
\ No newline at end of file diff --git a/docs/functions/Functions.matrix.html b/docs/functions/Functions.matrix.html deleted file mode 100644 index b1e6c35..0000000 --- a/docs/functions/Functions.matrix.html +++ /dev/null @@ -1,10 +0,0 @@ -matrix | @gobstones/gobstones-core - v0.4.7 -
  • Creates a two-dimensional matrix where all positions are filled using the given -generator.

    -

    Type Parameters

    • T

    Parameters

    • width: number

      The number of rows of the matrix

      -
    • height: number

      The number of columns of the matrix

      -
    • Optional initialValueGenerator: ((i, j) => T)

      A function that given the i,j position of the element returns - the element to store the matrix at that position

      -
        • (i, j): T
        • Parameters

          • i: number
          • j: number

          Returns T

    Returns T[][]

    A T[][] where T is the type of the elements in the matrix.

    -

    Throws

    Error if the width or the height given are zero or negative.

    -
\ No newline at end of file diff --git a/docs/functions/Functions.unflatten.html b/docs/functions/Functions.unflatten.html deleted file mode 100644 index d3224af..0000000 --- a/docs/functions/Functions.unflatten.html +++ /dev/null @@ -1,12 +0,0 @@ -unflatten | @gobstones/gobstones-core - v0.4.7 -
  • Un-Flatten the given object. -Given an object without nested elements, but whose keys represent paths in -a nested elements object, return an object that has nested objects in it. -This the reverse of flatten, in such a way that this complies.

    -

    Type Parameters

    • TTarget extends Record<string, any>

    • TResult extends Record<string, any>

    Parameters

    • target: TTarget

      The element to unflatten.

      -
    • Optional options: UnflattenOptions

      The option to unflatten.

      -

    Returns TResult

    Example

    unflatten({
    'a.a1': 1,
    'a.a2': 2,
    'b.b1.b1i': 'hello',
    'b.b1.b1ii': 'world'
    });
    // this will yield:
    {
    a: {
    a1: 1,
    a2: 2
    },
    b: {
    b1: {
    b1i: 'hello',
    b1ii: 'world'
    }
    }
    } -
    -

    Additional options may be passed, such as which character is used as a delimiter, -or the maximum depth level.

    -
\ No newline at end of file diff --git a/docs/functions/cli.cli-1.html b/docs/functions/cli.cli-1.html deleted file mode 100644 index 66356c2..0000000 --- a/docs/functions/cli.cli-1.html +++ /dev/null @@ -1,4 +0,0 @@ -cli | @gobstones/gobstones-core - v0.4.7 -
\ No newline at end of file diff --git a/docs/functions/cli.readJSON.html b/docs/functions/cli.readJSON.html deleted file mode 100644 index 28e71e6..0000000 --- a/docs/functions/cli.readJSON.html +++ /dev/null @@ -1,7 +0,0 @@ -readJSON | @gobstones/gobstones-core - v0.4.7 -
  • Retrieves an object with the data from a JSON file -after reading the same from the command line. -This function is useful here as most times you will -want to retrieve data from the package.json file.

    -

    Parameters

    • fileLocation: string

      The location of the file to read.

      -

    Returns any

\ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index e11b1ff..0000000 --- a/docs/index.html +++ /dev/null @@ -1,25 +0,0 @@ -@gobstones/gobstones-core - v0.4.7 -

@gobstones/gobstones-core - v0.4.7

gobstones-core

A set of utility types, interfaces and classes that are used through all the Gobstones Platform repositories.

-

Licence Version API Docs

-

GitHub Workflow Tests GitHub Workflow Build

-

Install

Install with npm by using

-
npm install @gobstones/gobstones-core
-
-

Usage

Unless you are developing a library for the Gobstones Platform you probably won't need to use this library directly, as many of the elements in this library are re-exported by other tools. If you are however interesting in using this library directly or you are effectively developing things in the Gobstones Platform, there are several ways how you can use this library.

-

Main module

The main module is @gobstones/gobstones-core and contains useful classes and abstraction to -most code usage in Gobstones. Currently some of the exported utilities are:

-
    -
  • Board related classes and interfaces (Board, Cell, Color, Direction)
  • -
  • Expectations (The expect function and all it's associated matchers)
  • -
  • Translator (Mainly the translator class and it's associated behavior)
  • -
  • SourceReader (A class to solve the problem of locating characters in source input)
  • -
  • helper tools (Such as a tool for creating matrices, a deepEqual comparison, and tools to flatten/unflatten an object)
  • -
-

Just import then from the main module the tools you want. Check the API for more information on what is exported and how it works.

-
import { Board } from '@gobstones/gobstones-core';
import { expect } from '@gobstones/gobstones-core';
import { SourceInput, SourceReader } from '@gobstones/gobstones-core'; -
-

CLI Module

The CLI module provides tools for constructing a CLI application. It resides on the /cli submodule. It exports mainly the cli type and function. Import it as follows:

-
import { cli } from '@gobstones/gobstones-core/cli';
-
-

Contributing

See the Gobstones Platform Contributions Guidelines to contribute.

-
\ No newline at end of file diff --git a/docs/interfaces/Expectations.IArrayExpectation.html b/docs/interfaces/Expectations.IArrayExpectation.html deleted file mode 100644 index 2a2990f..0000000 --- a/docs/interfaces/Expectations.IArrayExpectation.html +++ /dev/null @@ -1,46 +0,0 @@ -IArrayExpectation | @gobstones/gobstones-core - v0.4.7 -

This interface represents an expectation that is performed over an array.

-

Type Parameters

  • T

Hierarchy

Properties

This attribute retrieves an expectancy whose -result value is false in case the matcher fulfills, -and true otherwise.

-

Methods

\ No newline at end of file diff --git a/docs/interfaces/Expectations.IFinishedExpectation.html b/docs/interfaces/Expectations.IFinishedExpectation.html deleted file mode 100644 index 270ba79..0000000 --- a/docs/interfaces/Expectations.IFinishedExpectation.html +++ /dev/null @@ -1,18 +0,0 @@ -IFinishedExpectation | @gobstones/gobstones-core - v0.4.7 -

This interface represents an expectation after a matcher has been executed -and the result can be accessed.

-
interface IFinishedExpectation {
    andDo(action): void;
    andDoOr(actionIfTrue, actionIfFalse): void;
    getResult(): boolean;
    orDo(action): void;
    orThrow(error): void;
    orYield<T>(value): T;
}

Implemented by

Methods

  • If the result of the expectation is true, run the given function.

    -

    Parameters

    • action: (() => void)
        • (): void
        • Returns void

    Returns void

  • If the result of the expectation is true, run the first of the functions, -if false, run the second one.

    -

    Parameters

    • actionIfTrue: (() => void)
        • (): void
        • Returns void

    • actionIfFalse: (() => void)
        • (): void
        • Returns void

    Returns void

  • Return's the result of the expectancy as a boolean.

    -

    Returns boolean

    true if the value satisfied the expectation, falseotherwise.

    -
  • If the result of the expectation is false, run the given function.

    -

    Parameters

    • action: (() => void)
        • (): void
        • Returns void

    Returns void

  • If the result of the expectation is false, throw the given error.

    -

    Parameters

    • error: Error

    Returns void

  • If the result of the expectation is false, return the given value.

    -

    Type Parameters

    • T

    Parameters

    • value: T

    Returns T

\ No newline at end of file diff --git a/docs/interfaces/Expectations.IGenericExpectation.html b/docs/interfaces/Expectations.IGenericExpectation.html deleted file mode 100644 index 48636f2..0000000 --- a/docs/interfaces/Expectations.IGenericExpectation.html +++ /dev/null @@ -1,34 +0,0 @@ -IGenericExpectation | @gobstones/gobstones-core - v0.4.7 -

This type represents an expectation for any type of element. -The matchers that can be called contain general things, such as -strict comparison with other elements, be undefined, be null, -or any other checks.

-

Type Parameters

  • T

Hierarchy

Properties

This attribute retrieves an expectancy whose -result value is false in case the matcher fulfills, -and true otherwise.

-

Methods

  • Answers if the actual value has a type matching the expected type. -This comparison is performed using the typeof operation over the value, -with additional logic added to support 'array' as a type.

    -

    Parameters

    • value: string

    Returns IGenericExpectation<T> & IFinishedExpectation

    Example

    `toHaveType([1,2,3], 'array')` returns `true` as expected.
    -
    -
\ No newline at end of file diff --git a/docs/interfaces/Expectations.INumberExpectation.html b/docs/interfaces/Expectations.INumberExpectation.html deleted file mode 100644 index b82a376..0000000 --- a/docs/interfaces/Expectations.INumberExpectation.html +++ /dev/null @@ -1,50 +0,0 @@ -INumberExpectation | @gobstones/gobstones-core - v0.4.7 -

This interface represents an expectation that is performed over a number.

-

Hierarchy

Properties

This attribute retrieves an expectancy whose -result value is false in case the matcher fulfills, -and true otherwise.

-

Methods

  • Answer if the actual value is close to the expected value, by at least the number -of digits given.

    -

    Parameters

    • value: number
    • Optional precision: number

    Returns INumberExpectation & IFinishedExpectation

    Example

    `toBeCloseTo(4.0005, 4.0009, 3)` returns `true`, as there are 3
    digits that are equal between actual and expected.
    If no amount of digits is given, 5 is taken by default. -
    -
\ No newline at end of file diff --git a/docs/interfaces/Expectations.IObjectExpectation.html b/docs/interfaces/Expectations.IObjectExpectation.html deleted file mode 100644 index d29792a..0000000 --- a/docs/interfaces/Expectations.IObjectExpectation.html +++ /dev/null @@ -1,45 +0,0 @@ -IObjectExpectation | @gobstones/gobstones-core - v0.4.7 -

This interface represents an expectation that is performed over an object.

-

Type Parameters

  • T

Hierarchy

Properties

This attribute retrieves an expectancy whose -result value is false in case the matcher fulfills, -and true otherwise.

-

Methods

\ No newline at end of file diff --git a/docs/interfaces/Expectations.IStringExpectation.html b/docs/interfaces/Expectations.IStringExpectation.html deleted file mode 100644 index e2636c4..0000000 --- a/docs/interfaces/Expectations.IStringExpectation.html +++ /dev/null @@ -1,39 +0,0 @@ -IStringExpectation | @gobstones/gobstones-core - v0.4.7 -

This interface represents an expectation that is performed over a string.

-

Hierarchy

Properties

This attribute retrieves an expectancy whose -result value is false in case the matcher fulfills, -and true otherwise.

-

Methods

\ No newline at end of file diff --git a/docs/interfaces/Expectations.MatcherCall.html b/docs/interfaces/Expectations.MatcherCall.html deleted file mode 100644 index 3919e2c..0000000 --- a/docs/interfaces/Expectations.MatcherCall.html +++ /dev/null @@ -1,7 +0,0 @@ -MatcherCall | @gobstones/gobstones-core - v0.4.7 -

A matcher call represents a call to a matcher with it's corresponding -arguments and the actual result.

-
interface MatcherCall {
    args: any[];
    matcher: string;
    result: boolean;
}

Properties

Properties

args: any[]
matcher: string
result: boolean
\ No newline at end of file diff --git a/docs/interfaces/Functions.FlattenOptions.html b/docs/interfaces/Functions.FlattenOptions.html deleted file mode 100644 index 03d895f..0000000 --- a/docs/interfaces/Functions.FlattenOptions.html +++ /dev/null @@ -1,11 +0,0 @@ -FlattenOptions | @gobstones/gobstones-core - v0.4.7 -

Interface FlattenOptionsInternal

This type represent the options that are available for -a flattening action. This are copies of the definitions in -the flat library that we use as an internal implementation -and we do not recommend to relay on them, as they might change -in the future.

-
interface FlattenOptions {
    delimiter?: string;
    maxDepth?: number;
    safe?: boolean;
    transformKey?: ((key) => string);
}

Properties

delimiter?: string
maxDepth?: number
safe?: boolean
transformKey?: ((key) => string)

Type declaration

    • (key): string
    • Parameters

      • key: string

      Returns string

\ No newline at end of file diff --git a/docs/interfaces/Functions.UnflattenOptions.html b/docs/interfaces/Functions.UnflattenOptions.html deleted file mode 100644 index a188925..0000000 --- a/docs/interfaces/Functions.UnflattenOptions.html +++ /dev/null @@ -1,11 +0,0 @@ -UnflattenOptions | @gobstones/gobstones-core - v0.4.7 -

Interface UnflattenOptionsInternal

This type represent the options that are available for -a un-flattening action. This are copies of the definitions in -the flat library that we use as an internal implementation -and we do not recommend to relay on them, as they might change -in the future.

-
interface UnflattenOptions {
    delimiter?: string;
    object?: boolean;
    overwrite?: boolean;
    transformKey?: ((key) => string);
}

Properties

delimiter?: string
object?: boolean
overwrite?: boolean
transformKey?: ((key) => string)

Type declaration

    • (key): string
    • Parameters

      • key: string

      Returns string

\ No newline at end of file diff --git a/docs/interfaces/GobstonesLang.BoardDefinition.html b/docs/interfaces/GobstonesLang.BoardDefinition.html deleted file mode 100644 index 9749833..0000000 --- a/docs/interfaces/GobstonesLang.BoardDefinition.html +++ /dev/null @@ -1,29 +0,0 @@ -BoardDefinition | @gobstones/gobstones-core - v0.4.7 -

The definition of a Board as expected by the current Gobstones Interpreter. -This definition make heavy assumptions as for the origin of the board and -it's internal structure. Although this definition is left for reference, -the Board class (which implements this interface) should be considered -the new standard of what a board is, and should be used for every new development.

-
interface BoardDefinition {
    board: BoardInfo;
    format: string;
    head: CellLocation;
    height: number;
    width: number;
}

Implemented by

Properties

Properties

board: BoardInfo

Array of this.width elements, each of which is an array of this.height elements, -each of which is a cell, of the form {"a": na, "n": nn, "r": nr, "v": nv}, -in such a way that:

-
    -
  • this.board[x][y].a = number of blue stones at (x, y)
  • -
  • this.board[x][y].n = number of black stones at (x, y)
  • -
  • this.board[x][y].r = number of red stones at (x, y)
  • -
  • this.board[x][y].v = number of green stones at (x, y)
  • -
-

And it's assured that each element this.board[x][y] exists -for 0 <= x < this.width && 0 <= y < this.height.

-
format: string

The board format. Always: GBB/1.0 as it's derived from the GBB format

-

The head location as [x, y] position, where the position should comply to:

-
0 <= x < this.width && 0 <= y < this.height
-
-
height: number

The height of the board

-
width: number

The width of the board

-
\ No newline at end of file diff --git a/docs/interfaces/GobstonesLang.BoardEvents.html b/docs/interfaces/GobstonesLang.BoardEvents.html deleted file mode 100644 index 173bb1b..0000000 --- a/docs/interfaces/GobstonesLang.BoardEvents.html +++ /dev/null @@ -1,6 +0,0 @@ -BoardEvents | @gobstones/gobstones-core - v0.4.7 -

This interface contains the signature of the -events that a Board can throw.

-

Properties

\ No newline at end of file diff --git a/docs/interfaces/GobstonesLang.CellDataDefinition.html b/docs/interfaces/GobstonesLang.CellDataDefinition.html deleted file mode 100644 index 673dcd5..0000000 --- a/docs/interfaces/GobstonesLang.CellDataDefinition.html +++ /dev/null @@ -1,11 +0,0 @@ -CellDataDefinition | @gobstones/gobstones-core - v0.4.7 -

A cell data definition consists of the location of a cell, and -the amount of stones for any color (if non zero, undefined may be used -is those attributes if zero is ought to be used for such color).

-
interface CellDataDefinition {
    a?: number;
    n?: number;
    r?: number;
    v?: number;
    x: number;
    y: number;
}

Hierarchy

Properties

a? -n? -r? -v? -x -y -

Properties

a?: number
n?: number
r?: number
v?: number
x: number
y: number
\ No newline at end of file diff --git a/docs/interfaces/GobstonesLang.CellEvents.html b/docs/interfaces/GobstonesLang.CellEvents.html deleted file mode 100644 index 1726672..0000000 --- a/docs/interfaces/GobstonesLang.CellEvents.html +++ /dev/null @@ -1,5 +0,0 @@ -CellEvents | @gobstones/gobstones-core - v0.4.7 -

This interface contains the signature of the -events that a Cell can throw.

-
interface CellEvents {
    [onStonesChanged]: OnCellStonesChanged;
}

Properties

Properties

[onStonesChanged]: OnCellStonesChanged
\ No newline at end of file diff --git a/docs/interfaces/GobstonesLang.CellInfo.html b/docs/interfaces/GobstonesLang.CellInfo.html deleted file mode 100644 index 1e3d773..0000000 --- a/docs/interfaces/GobstonesLang.CellInfo.html +++ /dev/null @@ -1,13 +0,0 @@ -CellInfo | @gobstones/gobstones-core - v0.4.7 -

The information of a cell such that:

-
    -
  • a = number of blue stones
  • -
  • n = number of black stones
  • -
  • r = number of red stones
  • -
  • v = number of green stones
  • -
-
interface CellInfo {
    a: number;
    n: number;
    r: number;
    v: number;
}

Implemented by

Properties

a -n -r -v -

Properties

a: number
n: number
r: number
v: number
\ No newline at end of file diff --git a/docs/interfaces/SourceReader.SourceReaderLocale.html b/docs/interfaces/SourceReader.SourceReaderLocale.html deleted file mode 100644 index bdd5290..0000000 --- a/docs/interfaces/SourceReader.SourceReaderLocale.html +++ /dev/null @@ -1,11 +0,0 @@ -SourceReaderLocale | @gobstones/gobstones-core - v0.4.7 -

This interface declares the strings that the API of -SourceReader uses. -It is used by Translator to use the right string for the -current language. -To provide a translation to a new language, define an instance -of this interface and place it with the current ones (those for -English, en, and Spanish, es).

-
interface SourceReaderLocale {
    error: {
        AtEndOfDocumentBy: string;
        AtEndOfInputBy: string;
        NoInput: string;
        UnmatchingPositionsBy: string;
    };
    string: {
        EndOfDocument: string;
        EndOfInput: string;
        UnknownPosition: string;
    };
}

Properties

Properties

error: {
    AtEndOfDocumentBy: string;
    AtEndOfInputBy: string;
    NoInput: string;
    UnmatchingPositionsBy: string;
}

Type declaration

  • AtEndOfDocumentBy: string
  • AtEndOfInputBy: string
  • NoInput: string
  • UnmatchingPositionsBy: string
string: {
    EndOfDocument: string;
    EndOfInput: string;
    UnknownPosition: string;
}

Type declaration

  • EndOfDocument: string
  • EndOfInput: string
  • UnknownPosition: string
\ No newline at end of file diff --git a/docs/interfaces/cli.CLIAppOptions.html b/docs/interfaces/cli.CLIAppOptions.html deleted file mode 100644 index 7fc8b13..0000000 --- a/docs/interfaces/cli.CLIAppOptions.html +++ /dev/null @@ -1,25 +0,0 @@ -CLIAppOptions | @gobstones/gobstones-core - v0.4.7 -

A set of options for initially configure a CLI application. -If a translation is given

-
interface CLIAppOptions {
    flags?: CLIGeneralFlags;
    texts: CLIGeneralTexts;
    translator?: Translator<Record<string, any>>;
}

Properties

Properties

The flag names to use in this application, if the flags differ in any way from -the default ones.

-

The default flags include:

-
    -
  • help: -h, --help
  • -
  • version: -v, --version
  • -
  • language selection: -l, --language
  • -
  • input file for a command: -i, --in
  • -
  • output file for a command: -o, --out
  • -
-

The description texts (Or a description key if a Translator is provided) -that is used is the description of the different parts of the CLI. -The name and the versionNumber are expected to be the app name (No translation -is used, as the name should be the same through all the app), and the versionNumber -should be the version is the major.minor.patch.

-
translator?: Translator<Record<string, any>>

A Translator used to translate the tool to different locales, both when -called with a language flag, and automatically at startup by auto-detecting -the user language by checking OS Environment variables.

-
\ No newline at end of file diff --git a/docs/interfaces/cli.CLIGeneralFlags.html b/docs/interfaces/cli.CLIGeneralFlags.html deleted file mode 100644 index aed8227..0000000 --- a/docs/interfaces/cli.CLIGeneralFlags.html +++ /dev/null @@ -1,14 +0,0 @@ -CLIGeneralFlags | @gobstones/gobstones-core - v0.4.7 -

The general flags that a CLI app accepts, when configured to used them. -Note that currently the default flags cannot be changed.

-
interface CLIGeneralFlags {
    help: {
        long: string;
        short: string;
    };
    in: {
        long: string;
        short: string;
    };
    language: {
        long: string;
        short: string;
    };
    out: {
        long: string;
        short: string;
    };
    version: {
        long: string;
        short: string;
    };
}

Properties

Properties

help: {
    long: string;
    short: string;
}

The help flags, both short and long

-

Type declaration

  • long: string
  • short: string
in: {
    long: string;
    short: string;
}

The input file flags, both short and long

-

Type declaration

  • long: string
  • short: string
language: {
    long: string;
    short: string;
}

The language set flags, both short and long

-

Type declaration

  • long: string
  • short: string
out: {
    long: string;
    short: string;
}

The output file flags, both short and long

-

Type declaration

  • long: string
  • short: string
version: {
    long: string;
    short: string;
}

The version information flags, both short and long

-

Type declaration

  • long: string
  • short: string
\ No newline at end of file diff --git a/docs/interfaces/cli.CLIGeneralTexts.html b/docs/interfaces/cli.CLIGeneralTexts.html deleted file mode 100644 index 60e140d..0000000 --- a/docs/interfaces/cli.CLIGeneralTexts.html +++ /dev/null @@ -1,22 +0,0 @@ -CLIGeneralTexts | @gobstones/gobstones-core - v0.4.7 -

The general texts that a CLI app uses. -This include the description texts (Or a description key if a Translator is provided) -that are used a the description of the different parts of the CLI. -The name and the versionNumber are expected to be the app name (No translation -is used, as the name should be the same through all the app), and the versionNumber -should be the version is the major.minor.patch.

-
interface CLIGeneralTexts {
    help: string;
    language?: string;
    languageError?: string;
    name: string;
    tool: string;
    version: string;
    versionNumber: string;
}

Properties

help: string

A text displayed when showing the application's help

-
language?: string

The language used by the application

-
languageError?: string

The error message displayed when using a wrong language

-
name: string

The application name

-
tool: string

Text used by the tool

-
version: string

The text displayed when showing the version of the application

-
versionNumber: string

The application version number in semVer

-
\ No newline at end of file diff --git a/docs/modules/Events.html b/docs/modules/Events.html deleted file mode 100644 index 0a2c950..0000000 --- a/docs/modules/Events.html +++ /dev/null @@ -1,19 +0,0 @@ -Events | @gobstones/gobstones-core - v0.4.7 -

This module provides support for typed events, -wether is for classes that emit a particular -event, and allowing others to subscribe to that -event emission, or by simply creating objects that -can emit and be subscribed to.

-

The main and only class exported is EventEmitter, -which can be extended (the preferred way) or instantiated. -Events are typed so typescript support is a fully implemented -through generics.

-

The following is an example of how to create a class that emits -some events.

-

Example


import { EventEmitter } from './EventEmitter';

type StringChangeEventFunctionCall = (newString: string, oldString: string) => void;

interface StringChangedEventSignature {
onStringChanged: StringChangeEventFunctionCall;
}

class StringChangeEmitter extends EventEmitter<StringChangedEventSignature> {

...

protected onSomeAction(): void {
const oldString = ...;
const newString = ...;
this.emit('onStringChanged', newString, oldString);
}

...
}

...

const subscriberToStringChanged: StringChangeEventFunctionCall = (
newString: string,
oldString: string
): void => {
if (newString.length > 100) {
someGlobalString = oldString;
} else {
someGlobalString = newString;
}
};

export function subscribeToEvent(): void {
const emitter = new StringChangeEmitter();
emitter.on('onStringChanged', subscriberToStringChanged);
} -
-

Author

Alan Rodas Bonjour alanrodas@gmail.com

-

Index

API: Main

Internal: Definition types

\ No newline at end of file diff --git a/docs/modules/Expectations.html b/docs/modules/Expectations.html deleted file mode 100644 index d5551ac..0000000 --- a/docs/modules/Expectations.html +++ /dev/null @@ -1,51 +0,0 @@ -Expectations | @gobstones/gobstones-core - v0.4.7 -

This module exports the expect function, that is the kickoff to -create "expectations" over a specific element as shown in the following -example:

-

Example

expect(x+y).toBeGreaterThan(z)
.orThrow(new Error('x and y need to add up to more than z')); -
-

The expect function expects to receive a single argument of any type. -Given that element a new "expectation" is returned, whose specific type depends -of the type of the element given to expect as an argument. So expect(x) -returns an expectation. An expectation is an object that accepts any number of -matchers to be called upon it, such as toBe, toBeGreaterThan, toHaveLength -and so on. The specific set of matchers available depends on the type of the -expectation, which, as said, depends on the type of the argument given to -expect.

-

When a matcher is called, the element given to expect is passed to the -Matchers as the actual value, where the additional arguments over the -matcher are the arguments given to the matcher method called, so for example, -expect(x).toBe(y) calls the Matchers.toBe with x as actual argument -and y as expected argument.

-

Once the first matcher is called over an expectation, a IFinishedExpectation -is obtained. A finished matcher has a result, that may be one of true -(if the matcher was satisfied) or false if not. A finished matcher may be -queried for the result, by calling getResult, -but additional helper methods are provided by the interface in order to fulfill -different needs, such as throwing an error if the expectation was not satisfied, -or calling a function if it was.

-

New matchers may be called over a finished expectation, and the result of the -matcher would be calculated as an "and" over all the results. e.g. -expect(x).toBeGreaterThan(y).toBeLowerThan(z). This creates a new expectations -that is satisfied only when both parts (x being greater than y, and x being -lower than z) are true. This itself returns a new IFinishedExpectation, -that can be extended with new matchers, or queried about the results as -previously mentioned.

-

To see a list of all matchers, read the expect documentation, and the -Matchers documentation.

-

Author

Alan Rodas Bonjour alanrodas@gmail.com

-

Index

API: Main

API: Types

Internal: Types

\ No newline at end of file diff --git a/docs/modules/Functions.html b/docs/modules/Functions.html deleted file mode 100644 index 6e77adf..0000000 --- a/docs/modules/Functions.html +++ /dev/null @@ -1,14 +0,0 @@ -Functions | @gobstones/gobstones-core - v0.4.7 -

This module provides different functions that provide common functionality -that may be reused in different packages. -Functions that are widely used in different packages should be added here -for better accessibility in all packages.

-

Author

Alan Rodas Bonjour alanrodas@gmail.com

-

Index

API: Main

Internal: Definition types

\ No newline at end of file diff --git a/docs/modules/GobstonesLang.html b/docs/modules/GobstonesLang.html deleted file mode 100644 index 1b660aa..0000000 --- a/docs/modules/GobstonesLang.html +++ /dev/null @@ -1,52 +0,0 @@ -GobstonesLang | @gobstones/gobstones-core - v0.4.7 -

This module provides the Board class, which models a Gobstones Board -and all the associated behavior.

-

The Board class is expected to be used all through the Gobstones Platform -and all Gobstones plugins whenever a Board should be used (e.g. the -gobstones-gbb-parser -returns a Board from this module)

-

Toghether with such class it provides additional helper classes for it's behavior -such as Cell, Color and Direction, a set of error classes -that may occur when invalid arguments are given.

-

This module also provides a set of types that identify the information of a board -and it's parts (cell locations, cell contents and others). -This types are used by the Gobstones Interpreter and the Gobstones GBB Parser, -and it's main type is implemented by the Board class. Yet, this -definitions are internal to Gobstones Projects, and their usage should -be avoided as most as possible. External projects such as plugins should -be avoided in favor of using the Board class.

-

Author

Alan Rodas Bonjour alanrodas@gmail.com

-

Index

API: Events

API: Exceptions

API: Main

API: Options

API: Regexp

Events

Internal: Events

Internal: Type

Internal: Types

\ No newline at end of file diff --git a/docs/modules/SourceReader.html b/docs/modules/SourceReader.html deleted file mode 100644 index 58d8444..0000000 --- a/docs/modules/SourceReader.html +++ /dev/null @@ -1,49 +0,0 @@ -SourceReader | @gobstones/gobstones-core - v0.4.7 -

A SourceReader allows you to read input from some source, either one single string of -content or several named or indexed source strings, in such a way that each character read -may register its position in the source as a tuple index-line-column. -That is, the main problem it solves is that of calculating the position of each character -read by taking into account characters indicating the end-of-line. -It also solves the problem of input divided among several strings, as it is usually the case -with source code, and it provides a couple of additional features:

-
    -
  • to use some parts of the input as extra annotations by marking them as non visible, so -the input can be read as if the annotations were not there, and
  • -
  • to allow the relationship of parts of the input with identifiers naming "regions", thus -making it possible for external tools to identify those parts with ease.
  • -
-

A SourceReader is created using a SourceInput, and then SourcePosition -can be read from it. -Possible interactions with a SourceReader include:

-
    -
  • peek a character,
  • -
  • check if a given string occurs at the beginning of text without skipping it,
  • -
  • get the current position (as a SourcePosition),
  • -
  • detect if the end of input was reached,
  • -
  • skip one or more characters, and
  • -
  • manipulate "regions". -When reading from sources with multiple string of input, skipping moves from one of them to -the next transparently for the user (with the exception that regions are reset).
  • -
-

See SourceReader documentation for more details.

-

Index

API: Errors

API: Main

API: Source Positions

Internal: Translations

\ No newline at end of file diff --git a/docs/modules/Translator.html b/docs/modules/Translator.html deleted file mode 100644 index 4fd38fe..0000000 --- a/docs/modules/Translator.html +++ /dev/null @@ -1,12 +0,0 @@ -Translator | @gobstones/gobstones-core - v0.4.7 -

This module provides mechanisms to support basic localization of strings. -This allows for error messages and CLI to support different languages -without much effort.

-

Note that this module does not provide localization for the Gobstones Language -but for a tool internally, and should not be confused with other classes -exposed by this package. If you want to learn about how to translate the -Gobstones Language see -The Gobstones Language Translation Module.

-

Author

Alan Rodas Bonjour alanrodas@gmail.com

-

Index

API: Main

\ No newline at end of file diff --git a/docs/modules/Types.html b/docs/modules/Types.html deleted file mode 100644 index 303585a..0000000 --- a/docs/modules/Types.html +++ /dev/null @@ -1,11 +0,0 @@ -Types | @gobstones/gobstones-core - v0.4.7 -

The Types modules provides some useful type definitions and -data structures that may be useful for different projects. -Types and data structures that are widely used in different -packages should be added here for better accessibility in all packages.

-

This module includes the class BiMap as a bi-directional map, -and Subset as a recursive partial type definition.

-

Author

Alan Rodas Bonjour alanrodas@gmail.com

-

Index

API: Main

\ No newline at end of file diff --git a/docs/modules/Types_WithRequired.html b/docs/modules/Types_WithRequired.html deleted file mode 100644 index cff6952..0000000 --- a/docs/modules/Types_WithRequired.html +++ /dev/null @@ -1,3 +0,0 @@ -Types/WithRequired | @gobstones/gobstones-core - v0.4.7 -
\ No newline at end of file diff --git a/docs/modules/cli.html b/docs/modules/cli.html deleted file mode 100644 index 73e5795..0000000 --- a/docs/modules/cli.html +++ /dev/null @@ -1,16 +0,0 @@ -cli | @gobstones/gobstones-core - v0.4.7 -

This module provides the tools to create a CLI application -using commander as the background tool, but providing some -simple abstractions. The CLI produce may automatically support -multiple languages, input and output from and to files as well -as stdout, and other perks.

-

Author

Alan Rodas Bonjour alanrodas@gmail.com

-

Index

Functions

API: Main

API: Options

Internal: Types

\ No newline at end of file diff --git a/docs/types/Events.DefaultEventSignature.html b/docs/types/Events.DefaultEventSignature.html deleted file mode 100644 index 7754fb8..0000000 --- a/docs/types/Events.DefaultEventSignature.html +++ /dev/null @@ -1,6 +0,0 @@ -DefaultEventSignature | @gobstones/gobstones-core - v0.4.7 -
DefaultEventSignature: {
    [k: string]: ((...args) => any);
}

This type is a specification of EventSignature where each -event is key is a string (the most common case), and the subscriber -functions are any function. This is the default behavior of most -JavaScript event emitter, and the DOM event's signature.

-

Type declaration

  • [k: string]: ((...args) => any)
      • (...args): any
      • Parameters

        • Rest ...args: any[]

        Returns any

\ No newline at end of file diff --git a/docs/types/Events.EventSignature.html b/docs/types/Events.EventSignature.html deleted file mode 100644 index 422aa12..0000000 --- a/docs/types/Events.EventSignature.html +++ /dev/null @@ -1,6 +0,0 @@ -EventSignature | @gobstones/gobstones-core - v0.4.7 -
EventSignature<L>: {
    [E in keyof L]: ((...args) => any)
}

This type describes the basic mapping of available events to the -corresponding subscriber functions that may subscribe to such event. -Multiple events could be added, with different signatures for each -subscriber.

-

Type Parameters

  • L

\ No newline at end of file diff --git a/docs/types/GobstonesLang.BoardInfo.html b/docs/types/GobstonesLang.BoardInfo.html deleted file mode 100644 index a855937..0000000 --- a/docs/types/GobstonesLang.BoardInfo.html +++ /dev/null @@ -1,14 +0,0 @@ -BoardInfo | @gobstones/gobstones-core - v0.4.7 -
BoardInfo: CellInfo[][]

This type represents the Board cell information where given a board satisfies -board.width elements, each of which is an array of board.height elements, -each of which is a cell, of the form {"a": na, "n": nn, "r": nr, "v": nv}, -in such a way that:

-
    -
  • board.board[x][y].a = number of blue stones at (x, y)
  • -
  • board.board[x][y].n = number of black stones at (x, y)
  • -
  • board.board[x][y].r = number of red stones at (x, y)
  • -
  • board.board[x][y].v = number of green stones at (x, y)
  • -
-

And it's assured that each element this.board[x][y] exists -for 0 <= x < board.width && 0 <= y < board.height.

-
\ No newline at end of file diff --git a/docs/types/GobstonesLang.CellLocation.html b/docs/types/GobstonesLang.CellLocation.html deleted file mode 100644 index 852c231..0000000 --- a/docs/types/GobstonesLang.CellLocation.html +++ /dev/null @@ -1,5 +0,0 @@ -CellLocation | @gobstones/gobstones-core - v0.4.7 -
CellLocation: [number, number]

A cell location is just a two elements array (a pair) -in the form of [x, y] where x is the column that -the head is in and y is the row that the head is in.

-
\ No newline at end of file diff --git a/docs/types/GobstonesLang.CellReadingActionAttempt.html b/docs/types/GobstonesLang.CellReadingActionAttempt.html deleted file mode 100644 index 6083036..0000000 --- a/docs/types/GobstonesLang.CellReadingActionAttempt.html +++ /dev/null @@ -1,3 +0,0 @@ -CellReadingActionAttempt | @gobstones/gobstones-core - v0.4.7 -

Type alias CellReadingActionAttemptInternal

CellReadingActionAttempt: "ReadCell" | "ReadColumn" | "ReadRow"

The operation attempted to be performed when a InvalidCellReading error ocurred.

-
\ No newline at end of file diff --git a/docs/types/GobstonesLang.InvalidSizeChangeAttempt.html b/docs/types/GobstonesLang.InvalidSizeChangeAttempt.html deleted file mode 100644 index de70210..0000000 --- a/docs/types/GobstonesLang.InvalidSizeChangeAttempt.html +++ /dev/null @@ -1,3 +0,0 @@ -InvalidSizeChangeAttempt | @gobstones/gobstones-core - v0.4.7 -

Type alias InvalidSizeChangeAttemptInternal

InvalidSizeChangeAttempt: "Resize" | "RemoveRow" | "RemoveColumn" | "AddRows" | "AddColumns"

The operation attempted to be performed when a InvalidSizeChange error ocurred.

-
\ No newline at end of file diff --git a/docs/types/GobstonesLang.LocationChangeActionAttempt.html b/docs/types/GobstonesLang.LocationChangeActionAttempt.html deleted file mode 100644 index 85f90cf..0000000 --- a/docs/types/GobstonesLang.LocationChangeActionAttempt.html +++ /dev/null @@ -1,3 +0,0 @@ -LocationChangeActionAttempt | @gobstones/gobstones-core - v0.4.7 -

Type alias LocationChangeActionAttemptInternal

LocationChangeActionAttempt: "Move" | "SetLocation" | "MoveToEdge"

The operation attempted to be performed when a LocationFallsOutsideBoard error ocurred.

-
\ No newline at end of file diff --git a/docs/types/GobstonesLang.OnBoardHeadMovedCallback.html b/docs/types/GobstonesLang.OnBoardHeadMovedCallback.html deleted file mode 100644 index 1bde2b6..0000000 --- a/docs/types/GobstonesLang.OnBoardHeadMovedCallback.html +++ /dev/null @@ -1,12 +0,0 @@ -OnBoardHeadMovedCallback | @gobstones/gobstones-core - v0.4.7 -
OnBoardHeadMovedCallback: ((currentLocation, previousLocation) => void)

Type declaration

    • (currentLocation, previousLocation): void
    • This type represents the function that acts as a callback of -the Board.onHeadMoved event. Such an event is thrown by -an instance of a board whenever an operation is performed such -that the current head location is altered.

      -

      This function receives two arguments.

      -
        -
      • The current head location.
      • -
      • The previous head location.
      • -
      -

      Parameters

      Returns void

      See

      Board.onHeadMoved for more information.

      -
\ No newline at end of file diff --git a/docs/types/GobstonesLang.OnBoardSizeChangedCallback.html b/docs/types/GobstonesLang.OnBoardSizeChangedCallback.html deleted file mode 100644 index 8c327ef..0000000 --- a/docs/types/GobstonesLang.OnBoardSizeChangedCallback.html +++ /dev/null @@ -1,21 +0,0 @@ -OnBoardSizeChangedCallback | @gobstones/gobstones-core - v0.4.7 -
OnBoardSizeChangedCallback: ((newSize, newHeadLocation, fromOriginCell, previousSize, previousHeadLocation) => void)

Type declaration

    • (newSize, newHeadLocation, fromOriginCell, previousSize, previousHeadLocation): void
    • This type represents the function that acts as a callback of -the Board.onSizeChanged event. Such an event is thrown by -an instance of a board whenever an operation is performed such -that the original size of the board is altered.

      -

      This function receives 5 arguments:

      -
        -
      • the size of the board (encapsulated in an object containing both - width and height attributes), that being, the new size that the - board has been set to.
      • -
      • the new head location. This might be the same location that the head was - previously in, but it might change if the size was reduced and the cell - where the head was no longer exists.
      • -
      • A boolean, that is trueif the board change was performed origin first. - That is, the size was reduced from the West or the South, or expanded - into those directions.
      • -
      • The previous size the board had, in an encapsulated object with width and height.
      • -
      • The previous cell that the head was at. Might be the same as the current one.
      • -
      -

      Parameters

      • newSize: {
            height: number;
            width: number;
        }
        • height: number
        • width: number
      • newHeadLocation: CellLocation
      • fromOriginCell: boolean
      • previousSize: {
            height: number;
            width: number;
        }
        • height: number
        • width: number
      • previousHeadLocation: CellLocation

      Returns void

      See

      Board.onSizeChanged for more information.

      -
\ No newline at end of file diff --git a/docs/types/GobstonesLang.OnCellStonesChanged.html b/docs/types/GobstonesLang.OnCellStonesChanged.html deleted file mode 100644 index a379afb..0000000 --- a/docs/types/GobstonesLang.OnCellStonesChanged.html +++ /dev/null @@ -1,13 +0,0 @@ -OnCellStonesChanged | @gobstones/gobstones-core - v0.4.7 -
OnCellStonesChanged: ((cellLocation, stones, previousStones) => void)

Type declaration

    • (cellLocation, stones, previousStones): void
    • This type represents the function that acts as a callback of -the Cell.onStonesChanged event. Such an event is thrown by -an instance of a cell whenever an operation is performed such -that the cell changes the amount of cells.

      -

      This function receives 3 arguments:

      -
        -
      • the location of the cell as x, y coordinates.
      • -
      • The amount of the stones in the cell, after the change ocurred.
      • -
      • The previous amount of stones the cell had.
      • -
      -

      Parameters

      • cellLocation: {
            x: number;
            y: number;
        }
        • x: number
        • y: number
      • stones: {
            a: number;
            n: number;
            r: number;
            v: number;
        }
        • a: number
        • n: number
        • r: number
        • v: number
      • previousStones: {
            a: number;
            n: number;
            r: number;
            v: number;
        }
        • a: number
        • n: number
        • r: number
        • v: number

      Returns void

      See

      Cell.onStonesChanged for more information.

      -
\ No newline at end of file diff --git a/docs/types/GobstonesLang.StonesChangeActionAttempt.html b/docs/types/GobstonesLang.StonesChangeActionAttempt.html deleted file mode 100644 index 0bf1795..0000000 --- a/docs/types/GobstonesLang.StonesChangeActionAttempt.html +++ /dev/null @@ -1,3 +0,0 @@ -StonesChangeActionAttempt | @gobstones/gobstones-core - v0.4.7 -

Type alias StonesChangeActionAttemptInternal

StonesChangeActionAttempt: "AddStones" | "RemoveStones" | "SetStones"

The operation attempted to be performed when a InvalidStonesAmount error ocurred.

-
\ No newline at end of file diff --git a/docs/types/SourceReader.SourceInput.html b/docs/types/SourceReader.SourceInput.html deleted file mode 100644 index 2a8072d..0000000 --- a/docs/types/SourceReader.SourceInput.html +++ /dev/null @@ -1,25 +0,0 @@ -SourceInput | @gobstones/gobstones-core - v0.4.7 -
SourceInput: string | Record<string, string> | string[]

A Source Input is composed of one or more 'documents', that may be obtained (and identified) -in different ways: e.g. from files, web-services, or command line arguments, etc. -The type SourceInput establishes the different kinds of input a SourceReader -accepts to read, independently of how it was obtained.

-
    -
  • A single string represents a unique unnamed source document, for example as that coming from -a command line argument, e.g.
    'program { }'
    -
    -
  • -
  • The Record represents different source documents identified by a name, for example, different -filenames and their contents, e.g.
     {
    'foo.gbs': 'program { P() }',
    'bar.gbs': 'procedure P() {}',
    } -
    -
  • -
  • The array of strings represents different source documents with no identification, for -example, as it may come from a command line with one or more arguments and optional -configuration defaults, e.g.
    [ 'procedure P() { }',  'program { P() }' ]
    -
    -
  • -
-

An input instance of SourceInput is used in the creation of SourceReaders, -typically as

-
new SourceReader(input, '\n');
-
-
\ No newline at end of file diff --git a/docs/types/Types.Subset.html b/docs/types/Types.Subset.html deleted file mode 100644 index ceac855..0000000 --- a/docs/types/Types.Subset.html +++ /dev/null @@ -1,8 +0,0 @@ -Subset | @gobstones/gobstones-core - v0.4.7 -
Subset<K>: {
    [attr in keyof K]?: K[attr] extends object
        ? Subset<K[attr]>
        : K[attr] extends object | null
            ? Subset<K[attr]> | null
            : K[attr] extends object | null | undefined
                ? Subset<K[attr]> | null | undefined
                : K[attr]
}

This Utility Type works similar to Partial, but it proceeds recursively applying Partial -to all attributes of the type argument K, included nested ones.

-

It is taken from a -blog by Harmen Janssen, posted -on November 29, 2021. -See that blog for an explanation on the code.

-

Type Parameters

  • K

\ No newline at end of file diff --git a/docs/types/Types_WithRequired.WithRequired.html b/docs/types/Types_WithRequired.WithRequired.html deleted file mode 100644 index 9772ff2..0000000 --- a/docs/types/Types_WithRequired.WithRequired.html +++ /dev/null @@ -1,12 +0,0 @@ -WithRequired | @gobstones/gobstones-core - v0.4.7 -
WithRequired<T, K>: T & {
    [P in K]-?: T[P]
}

A type modifier that allows to construct a generic type that -requires only one property of a given type.

-

Type Parameters

  • T

    The base type.

    -
  • K extends keyof T

    the name of the property to require in the new type.

    -

Example

Conider that we have a type

-
type User = {
id: string
name?: string
email?: string
} -
-

Then we can create a type like so:

-
type UserWithName = WithRequired<User, 'name'>
-
-
\ No newline at end of file diff --git a/docs/types/cli.cli.html b/docs/types/cli.cli.html deleted file mode 100644 index d29a05b..0000000 --- a/docs/types/cli.cli.html +++ /dev/null @@ -1,3 +0,0 @@ -cli | @gobstones/gobstones-core - v0.4.7 -
cli: CLIApp

The Type of a CLI application

-
\ No newline at end of file diff --git a/docs/variables/GobstonesLang.identifier.html b/docs/variables/GobstonesLang.identifier.html deleted file mode 100644 index ce22c7e..0000000 --- a/docs/variables/GobstonesLang.identifier.html +++ /dev/null @@ -1,6 +0,0 @@ -identifier | @gobstones/gobstones-core - v0.4.7 -
identifier: RegExp = ...

This helper matches any of the above identifiers, that is, anything that is a word.

-

ES Form:

-
/(\p{Letter}|_)[\p{Letter}\p{Decimal_Number}_]* /u;
-
-
\ No newline at end of file diff --git a/docs/variables/GobstonesLang.lowerId.html b/docs/variables/GobstonesLang.lowerId.html deleted file mode 100644 index a78ac02..0000000 --- a/docs/variables/GobstonesLang.lowerId.html +++ /dev/null @@ -1,7 +0,0 @@ -lowerId | @gobstones/gobstones-core - v0.4.7 -
lowerId: RegExp = ...

Any word starting with an lowercase letter, that may be followed -by any amount of unicode letters or decimal numbers, or ASCII underscore.

-

ES Form:

-
/\p{Lowercase_Letter}[\p{Letter}\p{Decimal_Number}_]* /u;
-
-
\ No newline at end of file diff --git a/docs/variables/GobstonesLang.nonAlphabeticId.html b/docs/variables/GobstonesLang.nonAlphabeticId.html deleted file mode 100644 index d6a085c..0000000 --- a/docs/variables/GobstonesLang.nonAlphabeticId.html +++ /dev/null @@ -1,8 +0,0 @@ -nonAlphabeticId | @gobstones/gobstones-core - v0.4.7 -
nonAlphabeticId: RegExp = ...

Any word starting with a non upper, title or lowercase letter (that is, a letter -in a scripting that do not distinguishes between upper and lowercase forms), -that may be followed by any amount of unicode letters or decimal numbers, or ASCII underscore.

-

ES Form:

-
/\p{Other_Letter}[\p{Letter}\p{Decimal_Number}_]* /u;
-
-
\ No newline at end of file diff --git a/docs/variables/GobstonesLang.number.html b/docs/variables/GobstonesLang.number.html deleted file mode 100644 index 3a6e466..0000000 --- a/docs/variables/GobstonesLang.number.html +++ /dev/null @@ -1,3 +0,0 @@ -number | @gobstones/gobstones-core - v0.4.7 -
number: RegExp = ...

Numbers are only ASCII characters for digits

-
\ No newline at end of file diff --git a/docs/variables/GobstonesLang.sigiledNonAlphabeticId.html b/docs/variables/GobstonesLang.sigiledNonAlphabeticId.html deleted file mode 100644 index 0924619..0000000 --- a/docs/variables/GobstonesLang.sigiledNonAlphabeticId.html +++ /dev/null @@ -1,9 +0,0 @@ -sigiledNonAlphabeticId | @gobstones/gobstones-core - v0.4.7 -
sigiledNonAlphabeticId: RegExp = ...

Any word starting with an underscore and followed by a non upper, title or lowercase -letter (that is, a letter in a scripting that do not distinguishes between upper and -lowercase forms), that may be followed by any amount of unicode letters or decimal -numbers, or ASCII underscore.

-

ES Form:

-
/_\p{Other_Letter}[\p{Letter}\p{Decimal_Number}_]* /u;
-
-
\ No newline at end of file diff --git a/docs/variables/GobstonesLang.upperId.html b/docs/variables/GobstonesLang.upperId.html deleted file mode 100644 index 9b09b19..0000000 --- a/docs/variables/GobstonesLang.upperId.html +++ /dev/null @@ -1,7 +0,0 @@ -upperId | @gobstones/gobstones-core - v0.4.7 -
upperId: RegExp = ...

Any word starting with an uppercase letter (or titlecase for some languages), -that may be followed by any amount of unicode letters or decimal numbers, or ASCII underscore.

-

ES Form:

-
/(\p{Uppercase_Letter}|\p{Titlecase_Letter})[\p{Letter}\p{Decimal_Number}_]* /u;
-
-
\ No newline at end of file diff --git a/docs/variables/SourceReader.SourceReaderIntl.html b/docs/variables/SourceReader.SourceReaderIntl.html deleted file mode 100644 index 83aac36..0000000 --- a/docs/variables/SourceReader.SourceReaderIntl.html +++ /dev/null @@ -1,6 +0,0 @@ -SourceReaderIntl | @gobstones/gobstones-core - v0.4.7 -
SourceReaderIntl: Translator<SourceReaderLocale> = ...

The instance of the Translator for SourceReader. -It specialize its language interface to SourceReaderLocale. -It uses availableLocales to provide the locales, and defaults to English. -The translator is flattened to allow dot notation.

-
\ No newline at end of file diff --git a/docs/variables/SourceReader.availableLocales.html b/docs/variables/SourceReader.availableLocales.html deleted file mode 100644 index 97ad9d7..0000000 --- a/docs/variables/SourceReader.availableLocales.html +++ /dev/null @@ -1,5 +0,0 @@ -availableLocales | @gobstones/gobstones-core - v0.4.7 -
availableLocales: {
    en: SourceReaderLocale;
    en-AU: SourceReaderLocale;
    en-BZ: SourceReaderLocale;
    en-CA: SourceReaderLocale;
    en-CB: SourceReaderLocale;
    en-GB: SourceReaderLocale;
    en-IE: SourceReaderLocale;
    en-IN: SourceReaderLocale;
    en-JM: SourceReaderLocale;
    en-MT: SourceReaderLocale;
    en-MY: SourceReaderLocale;
    en-NZ: SourceReaderLocale;
    en-PH: SourceReaderLocale;
    en-SG: SourceReaderLocale;
    en-TT: SourceReaderLocale;
    en-US: SourceReaderLocale;
    en-ZA: SourceReaderLocale;
    en-ZW: SourceReaderLocale;
    es: SourceReaderLocale;
    es-AR: SourceReaderLocale;
    es-BO: SourceReaderLocale;
    es-CL: SourceReaderLocale;
    es-CO: SourceReaderLocale;
    es-CR: SourceReaderLocale;
    es-DO: SourceReaderLocale;
    es-EC: SourceReaderLocale;
    es-ES: SourceReaderLocale;
    es-GT: SourceReaderLocale;
    es-HN: SourceReaderLocale;
    es-MX: SourceReaderLocale;
    es-NI: SourceReaderLocale;
    es-PA: SourceReaderLocale;
    es-PE: SourceReaderLocale;
    es-PR: SourceReaderLocale;
    es-PY: SourceReaderLocale;
    es-SV: SourceReaderLocale;
    es-US: SourceReaderLocale;
    es-UY: SourceReaderLocale;
    es-VE: SourceReaderLocale;
} = ...

The locales available for translations for SourceReader. -It is similar to other availableLocales, providing locales not only for English and Spanish, -but also several local dialects (all defaulting to their base language).

-
\ No newline at end of file diff --git a/docs/variables/SourceReader.en.html b/docs/variables/SourceReader.en.html deleted file mode 100644 index fed94bc..0000000 --- a/docs/variables/SourceReader.en.html +++ /dev/null @@ -1,4 +0,0 @@ -en | @gobstones/gobstones-core - v0.4.7 -

The locale for English language, for SourceReader. -It implements interface SourceReaderLocale.

-
\ No newline at end of file diff --git a/docs/variables/SourceReader.es.html b/docs/variables/SourceReader.es.html deleted file mode 100644 index f9395ba..0000000 --- a/docs/variables/SourceReader.es.html +++ /dev/null @@ -1,4 +0,0 @@ -es | @gobstones/gobstones-core - v0.4.7 -

The locale for Spanish language, for SourceReader. -It implements interface SourceReaderLocale.

-
\ No newline at end of file diff --git a/package.json b/package.json index b898fd3..8f05055 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "commander": "^11.1.0" }, "devDependencies": { - "@gobstones/gobstones-scripts": "^0.5.4", + "@gobstones/gobstones-scripts": "^0.6.0", "husky": "^8.0.2" } } diff --git a/src/Types/Subset.ts b/src/Types/Subset.ts index 192a0ff..99c8cbc 100644 --- a/src/Types/Subset.ts +++ b/src/Types/Subset.ts @@ -17,8 +17,8 @@ export type Subset = { [attr in keyof K]?: K[attr] extends object ? Subset : K[attr] extends object | null - ? Subset | null - : K[attr] extends object | null | undefined - ? Subset | null | undefined - : K[attr]; + ? Subset | null + : K[attr] extends object | null | undefined + ? Subset | null | undefined + : K[attr]; };