From b301b797ae279c9a784e4e961e937c240622e7c0 Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Sat, 21 Sep 2024 00:10:35 +0530 Subject: [PATCH 1/7] chore: add runner script to create packages --- .../math-iter-unary/scripts/runner.js | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js diff --git a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js new file mode 100644 index 00000000000..c645a915cce --- /dev/null +++ b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var resolve = require( 'path' ).resolve; +var shell = require( 'child_process' ).execSync; // eslint-disable-line node/no-sync +var existsSync = require( '@stdlib/fs/exists' ).sync; +var objectKeys = require( '@stdlib/utils/keys' ); +var uppercase = require( '@stdlib/string/base/uppercase' ); +var rootDir = require( '@stdlib/_tools/utils/root-dir' ); +var log = require( '@stdlib/console/log' ); +var DATA = require( './data.json' ); + + +// VARIABLES // + +var CREATE_ONLY = 1; +var SCAFFOLD_SCRIPT = resolve( __dirname, 'scaffold.sh' ); +var ROOT_DIR = resolve( rootDir(), 'lib', 'node_modules' ); + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var names; + var keys; + var envs; + var str; + var cmd; + var p; + var k; + var v; + var o; + var i; + var j; + + keys = objectKeys( DATA ); + for ( i = 0; i < keys.length; i++ ) { + o = DATA[ keys[ i ] ]; + p = resolve( ROOT_DIR, '@stdlib/math/iter/special', o.alias, 'package.json' ); + if ( existsSync( p ) ) { + if ( CREATE_ONLY ) { + log( 'Package already exists. Skipping @%s...', 'stdlib/math/iter/special/' + o.alias ); + continue; + } + log( 'Updating package: @%s...', 'stdlib/math/iter/special/' + o.alias ); + } else { + log( 'Creating package: @%s...', 'stdlib/math/iter/special/' + o.alias ); + } + names = objectKeys( o ); + envs = []; + for ( j = 0; j < names.length; j++ ) { + k = names[ j ]; + v = o[ k ]; + str = uppercase( k ); + str += '='; + str += '\'' + v + '\''; + envs.push( str ); + } + cmd = envs.join( ' ' ) + ' . ' + SCAFFOLD_SCRIPT; + shell( cmd ); + } +} + +main(); From 6522b2b19ea2e6b63e3dcfd9329ea9b96422eede Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Fri, 27 Sep 2024 10:17:29 +0530 Subject: [PATCH 2/7] docs: update scaffold.sh --- .../_tools/scaffold/math-iter-unary/scripts/scaffold.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh index 7d5eda80bba..bf9a2464b9a 100755 --- a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh +++ b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh @@ -104,7 +104,7 @@ camelcase_to_snakecase() { } # Convert the alias to snakecase: -alias_snakecase=$(camelcase_to_snakecase "${alias:4}") +alias_snakecase=$(camelcase_to_snakecase "${alias}") # Define the destination package alias: pkg_alias="${alias_snakecase//_/-}" @@ -130,12 +130,8 @@ this_dir="${base_dir}/@stdlib/_tools/scaffold/math-iter-unary" # Define the location of a utility for wrapping REPL text descriptions: wrap="${base_dir}/@stdlib/_tools/repl-txt/wrap-desc/bin/cli" -# Define the unary function alias: -unary_alias=$(echo "${alias:4:1}" | tr '[:upper:]' '[:lower:]') -unary_alias="${unary_alias}${alias:5}" - # Convert the unary function alias to snakecase: -unary_alias_snakecase=$(camelcase_to_snakecase "${unary_alias}") +unary_alias_snakecase=$(camelcase_to_snakecase "${alias}") # Define the unary package "alias": unary_pkg_alias="${unary_alias_snakecase//_/-}" From ac6aacbb83db3c52a3fc431e2d3f0c13ad5f56c3 Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Sat, 28 Sep 2024 00:38:27 +0530 Subject: [PATCH 3/7] chore: update scaffold.sh --- .../math-iter-unary/scripts/scaffold.sh | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh index bf9a2464b9a..cc8d654a37a 100755 --- a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh +++ b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh @@ -31,29 +31,29 @@ # KEYWORDS List of keywords. # RAND_MIN Minimum value for generated values. # RAND_MAX Maximum value for generated values. -# VALUES_LEN_2 List of input values. +# EXAMPLE_VALUES List of input values. # ## USER-DEFINED VARIABLES ## # Define the main export alias: -alias=${ALIAS:-'iterTest'} +alias='iter'${echo ${ALIAS:-'Test'} | sed 's/./\u&/'} # Define the package description: # shellcheck disable=SC2016 -pkg_desc=${PKG_DESC:-'Create an iterator which computes `gamma(x+1) - 1` for each iterated value.'} +pkg_desc=${"Create an iterator which ${DESC:-'computes \`gamma(x+1) - 1\`'} for each iterated value."} # Define the module description: # shellcheck disable=SC2016 -module_desc=${MODULE_DESC:-'Create an iterator which iteratively computes `gamma(x+1) - 1`.'} +module_desc=${"Create an iterator which iteratively ${DESC:-'computes \`gamma(x+1) - 1\`'}."} # Define main export description: # shellcheck disable=SC2016 -main_desc=${MAIN_DESC:-'Returns an iterator which iteratively computes `gamma(x+1) - 1` without cancellation errors for small `x`.'} +main_desc=${"Returns an iterator which iteratively ${DESC:-'computes \`gamma(x+1) - 1\`'}."} # Define the test description: # shellcheck disable=SC2016 -test_desc=${TEST_DESC:-'computes `gamma(x+1) - 1` for each iterated value'} +test_desc=${DESC:-'computes \`gamma(x+1) - 1\`'}'for each iterated value' # Define description text (found in the README) which should be a link to the unary package (NOTE: to not include a link, set to an empty string): desc_link_text=${DESC_LINK_TEXT:-''} @@ -84,13 +84,13 @@ rand_min=${RAND_MIN:-'-5.0'} rand_max=${RAND_MAX:-'5.0'} # Define a list of input values: -if [[ -z "${VALUES_LEN_2:-}" ]]; then -values_len_2=( +if [[ -z "${EXAMPLE_VALUES:-}" ]]; then +example_values=( '0.2' '-8.5' ) else - IFS=','; read -ra values_len_2 <<< "${VALUES_LEN_2}"; IFS=' '; + IFS=','; read -ra example_values <<< "${EXAMPLE_VALUES}"; IFS=' '; fi @@ -104,7 +104,7 @@ camelcase_to_snakecase() { } # Convert the alias to snakecase: -alias_snakecase=$(camelcase_to_snakecase "${alias}") +alias_snakecase=$(camelcase_to_snakecase "${alias:4}") # Define the destination package alias: pkg_alias="${alias_snakecase//_/-}" @@ -130,8 +130,12 @@ this_dir="${base_dir}/@stdlib/_tools/scaffold/math-iter-unary" # Define the location of a utility for wrapping REPL text descriptions: wrap="${base_dir}/@stdlib/_tools/repl-txt/wrap-desc/bin/cli" +# Define the unary function alias: +unary_alias=$(echo "${alias:4:1}" | tr '[:upper:]' '[:lower:]') +unary_alias="${unary_alias}${alias:5}" + # Convert the unary function alias to snakecase: -unary_alias_snakecase=$(camelcase_to_snakecase "${alias}") +unary_alias_snakecase=$(camelcase_to_snakecase "${unary_alias}") # Define the unary package "alias": unary_pkg_alias="${unary_alias_snakecase//_/-}" @@ -153,7 +157,7 @@ year=$(date +'%Y') copyright='The Stdlib Authors' # Define lists of expected values: -expected_script="var roundn = require( '${base_dir}/@stdlib/math/base/special/roundn' );var isInteger = require( '${base_dir}/@stdlib/assert/is-integer' ).isPrimitive;var f = require( '${base_dir}/@${unary_pkg}' );var arr = '${values_len_2[*]}'.split( ' ' );var expected = arr.slice();for ( var i = 0; i < arr.length; i++ ) {var v1 = f( parseFloat( arr[ i ] ) );var v2 = roundn( v1, -3 );if ( v1 == v2 ) {v = v1.toString();if ( isInteger( v1 ) ) {v += '.0';}} else {v = '~' + v2.toString();if ( isInteger( v2 ) ) {v += '.0';}}expected[ i ] = v;}console.log( expected.join( ',' ) );" +expected_script="var roundn = require( '${base_dir}/@stdlib/math/base/special/roundn' );var isInteger = require( '${base_dir}/@stdlib/assert/is-integer' ).isPrimitive;var f = require( '${base_dir}/@${unary_pkg}' );var arr = '${example_values[*]}'.split( ' ' );var expected = arr.slice();for ( var i = 0; i < arr.length; i++ ) {var v1 = f( parseFloat( arr[ i ] ) );var v2 = roundn( v1, -3 );if ( v1 == v2 ) {v = v1.toString();if ( isInteger( v1 ) ) {v += '.0';}} else {v = '~' + v2.toString();if ( isInteger( v2 ) ) {v += '.0';}}expected[ i ] = v;}console.log( expected.join( ',' ) );" tmp=$(node -e "${expected_script}") IFS=','; read -ra expected_len_2 <<< "${tmp}"; IFS=' '; @@ -288,8 +292,8 @@ find_and_replace "${regex}" expected_values_sep=', ' -values=$(join "${expected_values_sep}" "${values_len_2[@]}") -regex="s/\\{\\{VALUES_LEN_2\\}\\}/${values}/g;" +values=$(join "${expected_values_sep}" "${example_values[@]}") +regex="s/\\{\\{EXAMPLE_VALUES\\}\\}/${values}/g;" find_and_replace "${regex}" regex="s/\\{\\{EXPECTED_1\\}\\}/${expected_len_2[0]}/g;" From d3c7b423c1ff70eebf255e20bc78c0d37c2176b3 Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Sat, 28 Sep 2024 14:28:53 +0530 Subject: [PATCH 4/7] chore: update runner.js and scaffold.sh --- .../math-iter-unary/scripts/runner.js | 17 ++++++++++---- .../math-iter-unary/scripts/scaffold.sh | 22 +++++++++---------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js index c645a915cce..3b5a1de5993 100644 --- a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js +++ b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js @@ -72,14 +72,23 @@ function main() { } else { log( 'Creating package: @%s...', 'stdlib/math/iter/special/' + o.alias ); } - names = objectKeys( o ); + names = [ 'base_alias', 'alias', 'pkg_desc', 'desc', 'example_values', 'rand' ]; envs = []; for ( j = 0; j < names.length; j++ ) { k = names[ j ]; v = o[ k ]; - str = uppercase( k ); - str += '='; - str += '\'' + v + '\''; + if ( k === 'example_values' ) { + envs.push( 'VALUES_LEN_2=\''+o.parameters[0].example_values.join(', ')+'\'' ); + continue; + } else if ( k === 'rand' ) { + envs.push( 'RAND_MIN='+o.parameters[0].rand.parameters[0] ); + envs.push( 'RAND_MAX='+o.parameters[0].rand.parameters[1] ); + continue; + } else { + str = uppercase( k ); + str += '='; + str += '\'' + v + '\''; + } envs.push( str ); } cmd = envs.join( ' ' ) + ' . ' + SCAFFOLD_SCRIPT; diff --git a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh index cc8d654a37a..06eb7323744 100755 --- a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh +++ b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh @@ -31,25 +31,25 @@ # KEYWORDS List of keywords. # RAND_MIN Minimum value for generated values. # RAND_MAX Maximum value for generated values. -# EXAMPLE_VALUES List of input values. +# VALUES_LEN_2 List of example values. # ## USER-DEFINED VARIABLES ## # Define the main export alias: -alias='iter'${echo ${ALIAS:-'Test'} | sed 's/./\u&/'} +alias='iter'$(echo ${ALIAS:-'Test'} | awk '{print toupper(substr($0, 1, 1)) tolower(substr($0, 2))}') # Define the package description: # shellcheck disable=SC2016 -pkg_desc=${"Create an iterator which ${DESC:-'computes \`gamma(x+1) - 1\`'} for each iterated value."} +pkg_desc="Create an iterator which ${DESC:-'computes \`gamma(x+1) - 1\`'} for each iterated value." # Define the module description: # shellcheck disable=SC2016 -module_desc=${"Create an iterator which iteratively ${DESC:-'computes \`gamma(x+1) - 1\`'}."} +module_desc="Create an iterator which iteratively ${DESC:-'computes \`gamma(x+1) - 1\`'}." # Define main export description: # shellcheck disable=SC2016 -main_desc=${"Returns an iterator which iteratively ${DESC:-'computes \`gamma(x+1) - 1\`'}."} +main_desc="Returns an iterator which iteratively ${DESC:-'computes \`gamma(x+1) - 1\`'}." # Define the test description: # shellcheck disable=SC2016 @@ -84,13 +84,13 @@ rand_min=${RAND_MIN:-'-5.0'} rand_max=${RAND_MAX:-'5.0'} # Define a list of input values: -if [[ -z "${EXAMPLE_VALUES:-}" ]]; then -example_values=( +if [[ -z "${VALUES_LEN_2:-}" ]]; then +values_len_2=( '0.2' '-8.5' ) else - IFS=','; read -ra example_values <<< "${EXAMPLE_VALUES}"; IFS=' '; + IFS=','; read -ra values_len_2 <<< "${VALUES_LEN_2}"; IFS=' '; fi @@ -157,7 +157,7 @@ year=$(date +'%Y') copyright='The Stdlib Authors' # Define lists of expected values: -expected_script="var roundn = require( '${base_dir}/@stdlib/math/base/special/roundn' );var isInteger = require( '${base_dir}/@stdlib/assert/is-integer' ).isPrimitive;var f = require( '${base_dir}/@${unary_pkg}' );var arr = '${example_values[*]}'.split( ' ' );var expected = arr.slice();for ( var i = 0; i < arr.length; i++ ) {var v1 = f( parseFloat( arr[ i ] ) );var v2 = roundn( v1, -3 );if ( v1 == v2 ) {v = v1.toString();if ( isInteger( v1 ) ) {v += '.0';}} else {v = '~' + v2.toString();if ( isInteger( v2 ) ) {v += '.0';}}expected[ i ] = v;}console.log( expected.join( ',' ) );" +expected_script="var roundn = require( '${base_dir}/@stdlib/math/base/special/roundn' );var isInteger = require( '${base_dir}/@stdlib/assert/is-integer' ).isPrimitive;var f = require( '${base_dir}/@${unary_pkg}' );var arr = '${values_len_2[*]}'.split( ' ' );var expected = arr.slice();for ( var i = 0; i < arr.length; i++ ) {var v1 = f( parseFloat( arr[ i ] ) );var v2 = roundn( v1, -3 );if ( v1 == v2 ) {v = v1.toString();if ( isInteger( v1 ) ) {v += '.0';}} else {v = '~' + v2.toString();if ( isInteger( v2 ) ) {v += '.0';}}expected[ i ] = v;}console.log( expected.join( ',' ) );" tmp=$(node -e "${expected_script}") IFS=','; read -ra expected_len_2 <<< "${tmp}"; IFS=' '; @@ -292,8 +292,8 @@ find_and_replace "${regex}" expected_values_sep=', ' -values=$(join "${expected_values_sep}" "${example_values[@]}") -regex="s/\\{\\{EXAMPLE_VALUES\\}\\}/${values}/g;" +values=$(join "${expected_values_sep}" "${values_len_2[@]}") +regex="s/\\{\\{VALUES_LEN_2\\}\\}/${values}/g;" find_and_replace "${regex}" regex="s/\\{\\{EXPECTED_1\\}\\}/${expected_len_2[0]}/g;" From 34d465c61ecfd3c893725f72127ef6b24a17355b Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Sat, 28 Sep 2024 14:29:47 +0530 Subject: [PATCH 5/7] Update scaffold.sh Signed-off-by: Gunj Joshi --- .../@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh index 06eb7323744..fec64932ad4 100755 --- a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh +++ b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh @@ -31,7 +31,7 @@ # KEYWORDS List of keywords. # RAND_MIN Minimum value for generated values. # RAND_MAX Maximum value for generated values. -# VALUES_LEN_2 List of example values. +# VALUES_LEN_2 List of input values. # ## USER-DEFINED VARIABLES ## From ae524f5ca8535274f870d5dca184ce31ae84a7c9 Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Sun, 29 Sep 2024 09:45:30 +0530 Subject: [PATCH 6/7] docs: update scaffold.sh --- .../@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh index 06eb7323744..dd967de42d4 100755 --- a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh +++ b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/scaffold.sh @@ -147,7 +147,7 @@ unary_pkg_path="stdlib/math/base/special" unary_pkg="${unary_pkg_path}/${unary_pkg_alias}" # Define the REPL text main export description (note: 4 space indent and wrap at 80 characters): -repl_text_main_desc=$(echo -n "${main_desc}" | "${wrap}") +repl_text_main_desc=$(echo "${main_desc}" | "${wrap}") repl_text_main_desc="${repl_text_main_desc/ /}" # Define the copyright year: From 13cf609294a534bd7e782fe0664c3394a23e9abd Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Sun, 29 Sep 2024 09:54:08 +0530 Subject: [PATCH 7/7] chore: add keywords in the names array --- .../_tools/scaffold/math-iter-unary/scripts/runner.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js index 3b5a1de5993..18c8126c767 100644 --- a/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js +++ b/lib/node_modules/@stdlib/_tools/scaffold/math-iter-unary/scripts/runner.js @@ -72,7 +72,7 @@ function main() { } else { log( 'Creating package: @%s...', 'stdlib/math/iter/special/' + o.alias ); } - names = [ 'base_alias', 'alias', 'pkg_desc', 'desc', 'example_values', 'rand' ]; + names = [ 'base_alias', 'alias', 'pkg_desc', 'desc', 'example_values', 'rand', 'keywords' ]; envs = []; for ( j = 0; j < names.length; j++ ) { k = names[ j ]; @@ -84,6 +84,9 @@ function main() { envs.push( 'RAND_MIN='+o.parameters[0].rand.parameters[0] ); envs.push( 'RAND_MAX='+o.parameters[0].rand.parameters[1] ); continue; + } else if ( k === 'keywords' ) { + envs.push( 'KEYWORDS=\'' + o.keywords.join(',') + '\'' ); + continue; } else { str = uppercase( k ); str += '=';