deno_cli_lib_windmill 0.104.0

Deno cli lib for the needs of windmill
// deno-fmt-ignore-file
// deno-lint-ignore-file

// Copyright Joyent and Node contributors. All rights reserved. MIT license.
// Taken from Node 18.12.1
// This file is automatically generated by "node/_tools/setup.ts". Do not modify this file manually

'use strict';

require('../common');

const assert = require('assert');
const { Console } = require('console');

const queue = [];

const console = new Console({ write: (x) => {
  queue.push(x);
}, removeListener: () => {} }, process.stderr, false);

function test(data, only, expected) {
  if (arguments.length === 2) {
    expected = only;
    only = undefined;
  }
  console.table(data, only);
  assert.deepStrictEqual(
    queue.shift().split('\n'),
    expected.trimLeft().split('\n')
  );
}

assert.throws(() => console.table([], false), {
  code: 'ERR_INVALID_ARG_TYPE',
});

test(null, 'null\n');
test(undefined, 'undefined\n');
test(false, 'false\n');
test('hi', 'hi\n');
test(Symbol(), 'Symbol()\n');
test(function() {}, '[Function (anonymous)]\n');

test([1, 2, 3], `

 (index)  Values 

    0       1    
    1       2    
    2       3    

`);

test([Symbol(), 5, [10]], `

 (index)  0    Values  

    0         Symbol() 
    1            5     
    2     10           

`);

test([null, 5], `

 (index)  Values 

    0      null  
    1       5    

`);

test([undefined, 5], `

 (index)   Values   

    0     undefined 
    1         5     

`);

test({ a: 1, b: Symbol(), c: [10] }, `

 (index)  0    Values  

    a            1     
    b         Symbol() 
    c     10           

`);

test(new Map([ ['a', 1], [Symbol(), [2]] ]), `

 (iteration index)    Key     Values 

         0            'a'       1    
         1          Symbol()  [ 2 ]  

`);

test(new Set([1, 2, Symbol()]), `

 (iteration index)   Values  

         0             1     
         1             2     
         2          Symbol() 

`);

test({ a: 1, b: 2 }, ['a'], `

 (index)  a 

    a       
    b       

`);

test([{ a: 1, b: 2 }, { a: 3, c: 4 }], ['a'], `

 (index)  a 

    0     1 
    1     3 

`);

test(new Map([[1, 1], [2, 2], [3, 3]]).entries(), `

 (iteration index)  Key  Values 

         0           1     1    
         1           2     2    
         2           3     3    

`);

test(new Map([[1, 1], [2, 2], [3, 3]]).values(), `

 (iteration index)  Values 

         0            1    
         1            2    
         2            3    

`);

test(new Map([[1, 1], [2, 2], [3, 3]]).keys(), `

 (iteration index)  Values 

         0            1    
         1            2    
         2            3    

`);

test(new Set([1, 2, 3]).values(), `

 (iteration index)  Values 

         0            1    
         1            2    
         2            3    

`);


test({ a: { a: 1, b: 2, c: 3 } }, `

 (index)  a  b  c 

    a     1  2  3 

`);

test({ a: { a: { a: 1, b: 2, c: 3 } } }, `

 (index)     a     

    a     [Object] 

`);

test({ a: [1, 2] }, `

 (index)  0  1 

    a     1  2 

`);

test({ a: [1, 2, 3, 4, 5], b: 5, c: { e: 5 } }, `

 (index)  0  1  2  3  4  e  Values 

    a     1  2  3  4  5            
    b                         5    
    c                    5         

`);

test(new Uint8Array([1, 2, 3]), `

 (index)  Values 

    0       1    
    1       2    
    2       3    

`);

test(Buffer.from([1, 2, 3]), `

 (index)  Values 

    0       1    
    1       2    
    2       3    

`);

test({ a: undefined }, ['x'], `

 (index)  x 

    a       

`);

test([], `

 (index) 


`);

test(new Map(), `

 (iteration index)  Key  Values 


`);

test([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }], `

 (index)   a    b  

    0      1   'Y' 
    1     'Z'   2  

`);

{
  const line = ''.repeat(79);
  const header = `${' '.repeat(37)}name${' '.repeat(40)}`;
  const name = 'very long long long long long long long long long long long ' +
               'long long long long';
  test([{ name }], `
${line}
 (index)   ${header}
${line}
    0     '${name}' 
${line}
`);
}

test({ foo: '', bar: '¥' }, `

 (index)  Values 

   foo     ''  
   bar     '¥'   

`);

test({ foo: '你好', bar: 'hello' }, `

 (index)  Values  

   foo    ''  
   bar    'hello' 

`);

// Regression test for prototype pollution via console.table. Earlier versions
// of Node.js created an object with a non-null prototype within console.table
// and then wrote to object[column][index], which lead to an error as well as
// modifications to Object.prototype.
test([{ foo: 10 }, { foo: 20 }], ['__proto__'], `

 (index)  __proto__ 

    0               
    1               

`);
assert.strictEqual('0' in Object.prototype, false);
assert.strictEqual('1' in Object.prototype, false);