All files / ext.wikilambda.app/composables useZObject.js

100% Statements 131/131
94.44% Branches 17/18
100% Functions 2/2
100% Lines 131/131

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 13267x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 67x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 391x 5x 5x 386x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 340x 2x 2x 338x 340x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 16x 2x 2x 16x 16x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 969x 67x  
/*!
 * ZObject Access composable for Vue 3 Composition API.
 * Provides ZObject access and manipulation functions
 *
 * @module ext.wikilambda.app.composables.useZObject
 * @copyright 2020– Abstract Wikipedia team; see AUTHORS.txt
 * @license MIT
 */
'use strict';
 
const { computed } = require( 'vue' );
const Constants = require( '../Constants.js' );
const {
	getZObjectType,
	getZStringTerminalValue,
	getZReferenceTerminalValue,
	getZMonolingualTextValue,
	getZMonolingualLangValue,
	getZMonolingualItemForLang,
	getZMultilingualValues,
	getZMultilingualLangs,
	getZLangTerminalValue,
	getZBooleanValue,
	getZFunctionCallFunctionId,
	getZFunctionCallArgumentKeys,
	getZArgumentReferenceTerminalValue,
	getZTesterFunctionZid,
	getZImplementationFunctionZid,
	getZImplementationContentType,
	getZCodeString,
	getZCodeProgrammingLanguageId,
	getZHTMLFragmentTerminalValue,
	getZKeyIsIdentity,
	isWikidataEntity,
	isWikidataLiteral,
	isWikidataFetch,
	isWikidataReference,
	getWikidataEntityId,
	getWikidataEntityReference
} = require( '../utils/zobjectUtils.js' );
 
/**
 * ZObject access composable
 *
 * @param {Object} options - Options object
 * @param {Object} [options.keyPath] - The keyPath ref from the component (optional)
 * @return {Object} ZObject composable API
 */
module.exports = function useZObject( { keyPath } = {} ) {
	/**
	 * Returns the immediate key, which is the last in the keyPath.
	 * * All components that use this composable should have keyPath as
	 *   a required prop.
	 * * keyPath can never be empty, it's always initialized with
	 *   some value, and carried down the tree.
	 *
	 * @return {string|undefined}
	 */
	const key = computed( () => {
		if ( !keyPath || typeof keyPath !== 'string' ) {
			return undefined;
		}
		return keyPath.split( '.' ).pop();
	} );
 
	/**
	 * Returns the parent key, which is the previous to last in the keyPath.
	 * * All components that use this composable should have keyPath as
	 *   a required prop.
	 * * keyPath can never be empty, it's always initialized with
	 *   some value, and carried down the tree.
	 *
	 * @return {string|undefined}
	 */
	const parentKey = computed( () => {
		if ( !keyPath || typeof keyPath !== 'string' ) {
			return undefined;
		}
		const parts = keyPath.split( '.' );
		return parts.length > 1 ? parts[ parts.length - 2 ] : undefined;
	} );
 
	/**
	 * Returns the depth of the ZObject, so that
	 * * main.Z2K2 = 1
	 * * levels from 1 to 6
	 *
	 * @return {number}
	 */
	const depth = computed( () => {
		if ( !keyPath || typeof keyPath !== 'string' ) {
			return 0;
		}
		const depthValue = ( keyPath.split( '.' ) || [] ).length - 1;
		return ( depthValue % Constants.COLOR_NESTING_LEVELS ) + 1;
	} );
 
	return {
		key,
		parentKey,
		depth,
		// ZObject utility methods
		getZObjectType,
		getZStringTerminalValue,
		getZReferenceTerminalValue,
		getZMonolingualTextValue,
		getZMonolingualLangValue,
		getZMonolingualItemForLang,
		getZMultilingualValues,
		getZMultilingualLangs,
		getZLangTerminalValue,
		getZBooleanValue,
		getZFunctionCallFunctionId,
		getZFunctionCallArgumentKeys,
		getZArgumentReferenceTerminalValue,
		getZTesterFunctionZid,
		getZImplementationFunctionZid,
		getZImplementationContentType,
		getZCodeString,
		getZCodeProgrammingLanguageId,
		getZHTMLFragmentTerminalValue,
		getZKeyIsIdentity,
		// Wikidata methods
		isWikidataEntity,
		isWikidataLiteral,
		isWikidataFetch,
		isWikidataReference,
		getWikidataEntityId,
		getWikidataEntityReference
	};
};