diff --git a/.github/workflows/ci-node.yml b/.github/workflows/ci-node.yml new file mode 100644 index 000000000..9c957860b --- /dev/null +++ b/.github/workflows/ci-node.yml @@ -0,0 +1,61 @@ +name: CI Node.js + +on: + push: + branches: [ main ] + pull_request: + +jobs: + test: + name: Node.js ${{ matrix.node-version }} on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + node-version: [ + '4', + '5', + '6', + '7', + '8', + '9', + '10', + '11', + '12', + '13', + '14', + '15', + '16', + '17', + '18', + '19', + '20', + '21', + '22', + '23', + '24', + '25' + ] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + + # This is due to bugs in npm 3’s handling of newer package formats. + - name: Use npm@3.10.10 for Node@5 + if: matrix.node-version == '5' + run: npm install -g npm@3.10.10 + + - name: Install dependencies + run: npm install + + - name: Run Validate + run: npm run validate \ No newline at end of file diff --git a/dist/lodash.js b/dist/lodash.js index 4131e936c..1d232ac5e 100644 --- a/dist/lodash.js +++ b/dist/lodash.js @@ -3766,7 +3766,7 @@ if (isArray(iteratee)) { return function(value) { return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } + }; } return iteratee; }); diff --git a/lodash.js b/lodash.js index 4131e936c..1d232ac5e 100644 --- a/lodash.js +++ b/lodash.js @@ -3766,7 +3766,7 @@ if (isArray(iteratee)) { return function(value) { return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } + }; } return iteratee; }); diff --git a/test/test.js b/test/test.js index fcb3a168e..0b200185c 100644 --- a/test/test.js +++ b/test/test.js @@ -22299,7 +22299,7 @@ QUnit.test('should forbid code injection through the "variable" options', function(assert) { assert.expect(1); - assert.raises(function () { + assert.raises(function() { _.template('', { 'variable': '){console.log(process.env)}; with(obj' }); }); }); @@ -22655,7 +22655,7 @@ var actual, expected = 'no error'; try { - actual = _.template(expected, {'sourceURL': '\u2028\u2029\n!this would err if it was executed!'})(); + actual = _.template(expected, {'sourceURL': '\u2028\u2029\n!this would err if it was executed!'})(); } catch (e) {} assert.equal(actual, expected); @@ -25840,35 +25840,35 @@ }); // zipObjectDeep prototype pollution - ['__proto__', 'constructor', 'prototype'].forEach(function (keyToTest) { - QUnit.test('zipObjectDeep is not setting ' + keyToTest + ' on global', function (assert) { + ['__proto__', 'constructor', 'prototype'].forEach(function(keyToTest) { + QUnit.test('zipObjectDeep is not setting ' + keyToTest + ' on global', function(assert) { assert.expect(1); _.zipObjectDeep([keyToTest + '.a'], ['newValue']); // Can't access plain `a` as it's not defined and test fails - assert.notEqual(root['a'], 'newValue'); + assert.notEqual(root.a, 'newValue'); }); - QUnit.test('zipObjectDeep is not overwriting ' + keyToTest + ' on vars', function (assert) { + QUnit.test('zipObjectDeep is not overwriting ' + keyToTest + ' on vars', function(assert) { assert.expect(3); - const b = 'oldValue' + const b = 'oldValue'; _.zipObjectDeep([keyToTest + '.b'], ['newValue']); assert.equal(b, 'oldValue'); - assert.notEqual(root['b'], 'newValue'); + assert.notEqual(root.b, 'newValue'); // ensure nothing was created - assert.notOk(root['b']); + assert.notOk(root.b); }); - QUnit.test('zipObjectDeep is not overwriting global.' + keyToTest, function (assert) { + QUnit.test('zipObjectDeep is not overwriting global.' + keyToTest, function(assert) { assert.expect(2); _.zipObjectDeep([root + '.' + keyToTest + '.c'], ['newValue']); - assert.notEqual(root['c'], 'newValue'); + assert.notEqual(root.c, 'newValue'); // ensure nothing was created - assert.notOk(root['c']); + assert.notOk(root.c); }); });