Skip to content

Commit ec8f2f9

Browse files
committed
Add support for providing standalone package names
1 parent ffa032f commit ec8f2f9

File tree

14 files changed

+84
-7
lines changed

14 files changed

+84
-7
lines changed

lib/node_modules/@stdlib/namespace/alias2standalone/data/data.csv

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ AFINN_96,"@stdlib/datasets-afinn-96"
33
AFINN_111,"@stdlib/datasets-afinn-111"
44
alias2pkg,"@stdlib/namespace-alias2pkg"
55
alias2related,"@stdlib/namespace-alias2related"
6+
alias2standalone,"@stdlib/namespace-alias2standalone"
67
aliases,"@stdlib/namespace-aliases"
78
allocUnsafe,"@stdlib/buffer-alloc-unsafe"
89
anova1,"@stdlib/stats-anova1"

lib/node_modules/@stdlib/namespace/alias2standalone/data/data.json

+1-1
Large diffs are not rendered by default.

lib/node_modules/@stdlib/namespace/pkg2alias/lib/main.js

+53
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,54 @@
2222

2323
var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
2424
var hasOwnProp = require( '@stdlib/assert/has-own-property' );
25+
var objectKeys = require( '@stdlib/utils/keys' );
26+
var replace = require( '@stdlib/string/replace' );
2527
var PKG_TO_ALIAS = require( './../data/data.json' );
2628

2729

30+
// VARIABLES //
31+
32+
var DB;
33+
34+
35+
// FUNCTIONS //
36+
37+
/**
38+
* Converts an internal package name to a standalone package name.
39+
*
40+
* @private
41+
* @param {string} name - internal package name
42+
* @returns {string} standalone package name
43+
*/
44+
function pkg2standalone( name ) {
45+
// Note: every internal package name begins with `@stdlib/`, which is 8 characters long...
46+
return '@stdlib/' + replace( name.substring( 8 ), '/', '-' );
47+
}
48+
49+
/**
50+
* Returns an in-memory hash mapping standalone package names to internal package names.
51+
*
52+
* @private
53+
* @returns {Object} hash mapping standalone package names to internal package names
54+
*/
55+
function database() {
56+
var keys;
57+
var k;
58+
var i;
59+
60+
if ( DB ) {
61+
return DB;
62+
}
63+
DB = {};
64+
keys = objectKeys( PKG_TO_ALIAS );
65+
for ( i = 0; i < keys.length; i++ ) {
66+
k = keys[ i ];
67+
DB[ pkg2standalone( k ) ] = k;
68+
}
69+
return DB;
70+
}
71+
72+
2873
// MAIN //
2974

3075
/**
@@ -39,12 +84,20 @@ var PKG_TO_ALIAS = require( './../data/data.json' );
3984
* // returns 'base.sin'
4085
*/
4186
function pkg2alias( pkg ) {
87+
var db;
4288
if ( !isString( pkg ) ) {
4389
throw new TypeError( 'invalid argument. Must provide a string. Value: `' + pkg + '`.' );
4490
}
4591
if ( hasOwnProp( PKG_TO_ALIAS, pkg ) ) {
4692
return PKG_TO_ALIAS[ pkg ];
4793
}
94+
db = database();
95+
if ( hasOwnProp( db, pkg ) ) {
96+
pkg = db[ pkg ];
97+
if ( hasOwnProp( PKG_TO_ALIAS, pkg ) ) {
98+
return PKG_TO_ALIAS[ pkg ];
99+
}
100+
}
48101
return null;
49102
}
50103

lib/node_modules/@stdlib/namespace/pkg2alias/test/test.js

+19
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
var tape = require( 'tape' );
2424
var aliases = require( '@stdlib/namespace/aliases' );
2525
var alias2pkg = require( '@stdlib/namespace/alias2pkg' );
26+
var alias2standalone = require( '@stdlib/namespace/alias2standalone' );
2627
var DATA = require( './../data/data.json' );
2728
var pkg2alias = require( './../lib' );
2829

@@ -80,6 +81,24 @@ tape( 'the function returns an alias', function test( t ) {
8081
t.end();
8182
});
8283

84+
tape( 'the function supports providing a standalone package name', function test( t ) {
85+
var expected;
86+
var actual;
87+
var list;
88+
var pkg;
89+
var i;
90+
91+
list = aliases();
92+
for ( i = 0; i < list.length; i++ ) {
93+
pkg = alias2standalone( list[i] );
94+
expected = DATA[ alias2pkg( list[i] ) ];
95+
actual = pkg2alias( pkg );
96+
t.strictEqual( typeof actual, 'string', 'returns a string' );
97+
t.strictEqual( actual, expected, 'returns expected value for '+pkg );
98+
}
99+
t.end();
100+
});
101+
83102
tape( 'the function returns `null` if provided an unrecognized package name', function test( t ) {
84103
var values;
85104
var i;

lib/node_modules/@stdlib/repl/code-blocks/data/data.csv

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ AFINN_96,"var list = AFINN_96()\n"
44
AFINN_111,"var list = AFINN_111()\n"
55
alias2pkg,"var v = alias2pkg( 'base.sin' )\n"
66
alias2related,"var v = alias2related( 'base.sin' )\n"
7+
alias2standalone,"var v = alias2standalone( 'base.sin' )\n"
78
aliases,"var o = aliases()\no = aliases( '@stdlib/math/base/special' )\n"
89
allocUnsafe,"var buf = allocUnsafe( 100 )\n"
910
anova1,"var x = [1, 3, 5, 2, 4, 6, 8, 7, 10, 11, 12, 15];\nvar f = [\n 'control', 'treatA', 'treatB', 'treatC', 'control',\n 'treatA', 'treatB', 'treatC', 'control', 'treatA', 'treatB', 'treatC'\n ];\nvar out = anova1( x, f )\n"

lib/node_modules/@stdlib/repl/code-blocks/data/data.json

+1-1
Large diffs are not rendered by default.

lib/node_modules/@stdlib/repl/help/data/data.csv

+1-1
Large diffs are not rendered by default.

lib/node_modules/@stdlib/repl/help/data/data.json

+1-1
Large diffs are not rendered by default.

lib/node_modules/@stdlib/repl/info/data/data.csv

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ AFINN_96,"\nAFINN_96()\n Returns a list of English words rated for valence.\n
44
AFINN_111,"\nAFINN_111()\n Returns a list of English words rated for valence.\n"
55
alias2pkg,"\nalias2pkg( alias:string )\n Returns the package name associated with a provided alias.\n"
66
alias2related,"\nalias2related( alias:string )\n Returns aliases related to a specified alias.\n"
7+
alias2standalone,"\nalias2standalone( alias:string )\n Returns the standalone package name associated with a provided alias.\n"
78
aliases,"\naliases( [namespace:string] )\n Returns a list of standard library aliases.\n"
89
allocUnsafe,"\nallocUnsafe( size:integer )\n Allocates a buffer having a specified number of bytes.\n"
910
anova1,"\nanova1( x:Array<number>, factor:Array[, options:Object] )\n Performs a one-way analysis of variance.\n"

lib/node_modules/@stdlib/repl/info/data/data.json

+1-1
Large diffs are not rendered by default.

lib/node_modules/@stdlib/repl/signature/data/data.csv

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ AFINN_96,"AFINN_96()"
44
AFINN_111,"AFINN_111()"
55
alias2pkg,"alias2pkg( alias )"
66
alias2related,"alias2related( alias )"
7+
alias2standalone,"alias2standalone( alias )"
78
aliases,"aliases( [namespace] )"
89
allocUnsafe,"allocUnsafe( size )"
910
anova1,"anova1( x, factor[, options] )"

lib/node_modules/@stdlib/repl/signature/data/data.json

+1-1
Large diffs are not rendered by default.

lib/node_modules/@stdlib/repl/typed-signature/data/data.csv

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ AFINN_96,"AFINN_96()"
44
AFINN_111,"AFINN_111()"
55
alias2pkg,"alias2pkg( alias:string )"
66
alias2related,"alias2related( alias:string )"
7+
alias2standalone,"alias2standalone( alias:string )"
78
aliases,"aliases( [namespace:string] )"
89
allocUnsafe,"allocUnsafe( size:integer )"
910
anova1,"anova1( x:Array<number>, factor:Array[, options:Object] )"

lib/node_modules/@stdlib/repl/typed-signature/data/data.json

+1-1
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)