From f2bd7bde30224db3e4c943fa89a76eb39be74398 Mon Sep 17 00:00:00 2001 From: fwx913451 Date: Fri, 28 Aug 2020 18:01:43 +0800 Subject: [PATCH 1/2] fuanan add package --- extend-3.0.0.tgz | Bin 0 -> 6771 bytes nodejs-extend.spec | 50 ++++ nodejs-extend.yaml | 5 + test-index.js | 637 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 692 insertions(+) create mode 100644 extend-3.0.0.tgz create mode 100644 nodejs-extend.spec create mode 100644 nodejs-extend.yaml create mode 100644 test-index.js diff --git a/extend-3.0.0.tgz b/extend-3.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..42c0c69e31bee98d26ef18ae4c843ee5a5b13f46 GIT binary patch literal 6771 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 VU-#Gjb$_MT{{p^akktTc002o`3A6wJ literal 0 HcmV?d00001 diff --git a/nodejs-extend.spec b/nodejs-extend.spec new file mode 100644 index 0000000..f2db05b --- /dev/null +++ b/nodejs-extend.spec @@ -0,0 +1,50 @@ +%{?nodejs_find_provides_and_requires} +%global enable_tests 1 +%global barename extend +Name: nodejs-extend +Version: 3.0.0 +Release: 1 +Summary: Port of jQuery.extend for node.js and the browser +License: MIT +URL: https://www.npmjs.org/package/extend +Source0: https://registry.npmjs.org/extend/-/extend-%{version}.tgz +Source1: test-index.js +BuildArch: noarch +ExclusiveArch: %{nodejs_arches} noarch +ExclusiveArch: %{ix86} x86_64 %{arm} noarch +BuildRequires: nodejs-packaging >= 6 +%if 0%{?enable_tests} +BuildRequires: npm(tape) +%endif +%description +nodejs-extend is a port of the classic extend() method from jQuery. It behaves +as you expect. It is simple, tried and true. + +%prep +%setup -q -n package +install -D -p -m0644 %{SOURCE1} test/index.js +rm -rf node_modules/ +%nodejs_fixdep --caret + +%build + +%install +mkdir -p %{buildroot}%{nodejs_sitelib}/extend +cp -pr package.json index.js \ + %{buildroot}%{nodejs_sitelib}/extend +%nodejs_symlink_deps + +%check +%if 0%{?enable_tests} +%nodejs_symlink_deps --check +node test/index.js +%endif + +%files +%doc README.md +%license LICENSE +%{nodejs_sitelib}/extend/ + +%changelog +* Thu Aug 20 2020 Anan Fu - 3.0.0-1 +- package init diff --git a/nodejs-extend.yaml b/nodejs-extend.yaml new file mode 100644 index 0000000..762fbe5 --- /dev/null +++ b/nodejs-extend.yaml @@ -0,0 +1,5 @@ +git_url: https://www.npmjs.org/package/extend +version_control: registry +src_repo: https://registry.npmjs.org/extend/- +tag_prefix: "^" +seperator: "." diff --git a/test-index.js b/test-index.js new file mode 100644 index 0000000..cb4117f --- /dev/null +++ b/test-index.js @@ -0,0 +1,637 @@ +'use strict'; + +var extend = require('../index'); +var test = require('tape'); + +var str = 'me a test'; +var integer = 10; +var arr = [1, 'what', new Date(81, 8, 4)]; +var date = new Date(81, 4, 13); + +var Foo = function () {}; + +var obj = { + str: str, + integer: integer, + arr: arr, + date: date, + constructor: 'fake', + isPrototypeOf: 'not a function', + foo: new Foo() +}; + +var deep = { + ori: obj, + layer: { + integer: 10, + str: 'str', + date: new Date(84, 5, 12), + arr: [101, 'dude', new Date(82, 10, 4)], + deep: { + str: obj.str, + integer: integer, + arr: obj.arr, + date: new Date(81, 7, 4) + } + } +}; + +test('missing arguments', function (t) { + t.deepEqual(extend(undefined, { a: 1 }), { a: 1 }, 'missing first argument is second argument'); + t.deepEqual(extend({ a: 1 }), { a: 1 }, 'missing second argument is first argument'); + t.deepEqual(extend(true, undefined, { a: 1 }), { a: 1 }, 'deep: missing first argument is second argument'); + t.deepEqual(extend(true, { a: 1 }), { a: 1 }, 'deep: missing second argument is first argument'); + t.deepEqual(extend(), {}, 'no arguments is object'); + t.end(); +}); + +test('merge string with string', function (t) { + var ori = 'what u gonna say'; + var target = extend(ori, str); + var expectedTarget = { + 0: 'm', + 1: 'e', + 2: ' ', + 3: 'a', + 4: ' ', + 5: 't', + 6: 'e', + 7: 's', + 8: 't' + }; + + t.equal(ori, 'what u gonna say', 'original string 1 is unchanged'); + t.equal(str, 'me a test', 'original string 2 is unchanged'); + t.deepEqual(target, expectedTarget, 'string + string is merged object form of string'); + t.end(); +}); + +test('merge string with number', function (t) { + var ori = 'what u gonna say'; + var target = extend(ori, 10); + + t.equal(ori, 'what u gonna say', 'original string is unchanged'); + t.deepEqual(target, {}, 'string + number is empty object'); + + t.end(); +}); + +test('merge string with array', function (t) { + var ori = 'what u gonna say'; + var target = extend(ori, arr); + + t.equal(ori, 'what u gonna say', 'original string is unchanged'); + t.deepEqual(arr, [1, 'what', new Date(81, 8, 4)], 'array is unchanged'); + t.deepEqual(target, { + 0: 1, + 1: 'what', + 2: new Date(81, 8, 4) + }, 'string + array is array'); + t.end(); +}); + +test('merge string with date', function (t) { + var ori = 'what u gonna say'; + var target = extend(ori, date); + + var testDate = new Date(81, 4, 13); + t.equal(ori, 'what u gonna say', 'original string is unchanged'); + t.deepEqual(date, testDate, 'date is unchanged'); + t.deepEqual(target, testDate, 'string + date is date'); + t.end(); +}); + +test('merge string with obj', function (t) { + var ori = 'what u gonna say'; + var target = extend(ori, obj); + + t.equal(ori, 'what u gonna say', 'original string is unchanged'); + var testObj = { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 4, 13), + constructor: 'fake', + isPrototypeOf: 'not a function', + foo: new Foo() + }; + t.deepEqual(obj, testObj, 'original obj is unchanged'); + t.deepEqual(target, testObj, 'string + obj is obj'); + t.end(); +}); + +test('merge number with string', function (t) { + var ori = 20; + var target = extend(ori, str); + + t.equal(ori, 20, 'number is unchanged'); + t.equal(str, 'me a test', 'string is unchanged'); + t.deepEqual(target, { + 0: 'm', + 1: 'e', + 2: ' ', + 3: 'a', + 4: ' ', + 5: 't', + 6: 'e', + 7: 's', + 8: 't' + }, 'number + string is object form of string'); + t.end(); +}); + +test('merge number with number', function (t) { + t.deepEqual(extend(20, 10), {}, 'number + number is empty object'); + t.end(); +}); + +test('merge number with array', function (t) { + var target = extend(20, arr); + + t.deepEqual(arr, [1, 'what', new Date(81, 8, 4)], 'array is unchanged'); + t.deepEqual(target, { + 0: 1, + 1: 'what', + 2: new Date(81, 8, 4) + }, 'number + arr is object with array contents'); + t.end(); +}); + +test('merge number with date', function (t) { + var target = extend(20, date); + var testDate = new Date(81, 4, 13); + + t.deepEqual(date, testDate, 'original date is unchanged'); + t.deepEqual(target, testDate, 'number + date is date'); + t.end(); +}); + +test('merge number with object', function (t) { + var target = extend(20, obj); + var testObj = { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 4, 13), + constructor: 'fake', + isPrototypeOf: 'not a function', + foo: new Foo() + }; + + t.deepEqual(obj, testObj, 'obj is unchanged'); + t.deepEqual(target, testObj, 'number + obj is obj'); + t.end(); +}); + +test('merge array with string', function (t) { + var ori = [1, 2, 3, 4, 5, 6]; + var target = extend(ori, str); + + t.deepEqual(ori, str.split(''), 'array is changed to be an array of string chars'); + t.equal(str, 'me a test', 'string is unchanged'); + t.deepEqual(target, { + 0: 'm', + 1: 'e', + 2: ' ', + 3: 'a', + 4: ' ', + 5: 't', + 6: 'e', + 7: 's', + 8: 't' + }, 'array + string is object form of string'); + t.end(); +}); + +test('merge array with number', function (t) { + var ori = [1, 2, 3, 4, 5, 6]; + var target = extend(ori, 10); + + t.deepEqual(ori, [1, 2, 3, 4, 5, 6], 'array is unchanged'); + t.deepEqual(target, ori, 'array + number is array'); + t.end(); +}); + +test('merge array with array', function (t) { + var ori = [1, 2, 3, 4, 5, 6]; + var target = extend(ori, arr); + var testDate = new Date(81, 8, 4); + var expectedTarget = [1, 'what', testDate, 4, 5, 6]; + + t.deepEqual(ori, expectedTarget, 'array + array merges arrays; changes first array'); + t.deepEqual(arr, [1, 'what', testDate], 'second array is unchanged'); + t.deepEqual(target, expectedTarget, 'array + array is merged array'); + t.end(); +}); + +test('merge array with date', function (t) { + var ori = [1, 2, 3, 4, 5, 6]; + var target = extend(ori, date); + var testDate = new Date(81, 4, 13); + var testArray = [1, 2, 3, 4, 5, 6]; + + t.deepEqual(ori, testArray, 'array is unchanged'); + t.deepEqual(date, testDate, 'date is unchanged'); + t.deepEqual(target, testArray, 'array + date is array'); + t.end(); +}); + +test('merge array with object', function (t) { + var ori = [1, 2, 3, 4, 5, 6]; + var target = extend(ori, obj); + var testObject = { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 4, 13), + constructor: 'fake', + isPrototypeOf: 'not a function', + foo: new Foo() + }; + + t.deepEqual(obj, testObject, 'obj is unchanged'); + t.equal(ori.length, 6, 'array has proper length'); + t.equal(ori.str, obj.str, 'array has obj.str property'); + t.equal(ori.integer, obj.integer, 'array has obj.integer property'); + t.deepEqual(ori.arr, obj.arr, 'array has obj.arr property'); + t.equal(ori.date, obj.date, 'array has obj.date property'); + + t.equal(target.length, 6, 'target has proper length'); + t.equal(target.str, obj.str, 'target has obj.str property'); + t.equal(target.integer, obj.integer, 'target has obj.integer property'); + t.deepEqual(target.arr, obj.arr, 'target has obj.arr property'); + t.equal(target.date, obj.date, 'target has obj.date property'); + t.end(); +}); + +test('merge date with string', function (t) { + var ori = new Date(81, 9, 20); + var target = extend(ori, str); + var testObject = { + 0: 'm', + 1: 'e', + 2: ' ', + 3: 'a', + 4: ' ', + 5: 't', + 6: 'e', + 7: 's', + 8: 't' + }; + + t.deepEqual(ori, testObject, 'date is changed to object form of string'); + t.equal(str, 'me a test', 'string is unchanged'); + t.deepEqual(target, testObject, 'date + string is object form of string'); + t.end(); +}); + +test('merge date with number', function (t) { + var ori = new Date(81, 9, 20); + var target = extend(ori, 10); + + t.deepEqual(ori, {}, 'date is changed to empty object'); + t.deepEqual(target, {}, 'date + number is empty object'); + t.end(); +}); + +test('merge date with array', function (t) { + var ori = new Date(81, 9, 20); + var target = extend(ori, arr); + var testDate = new Date(81, 9, 20); + var testArray = [1, 'what', new Date(81, 8, 4)]; + + t.deepEqual(ori, testDate, 'date is unchanged'); + t.deepEqual(arr, testArray, 'array is unchanged'); + t.deepEqual(target, testDate, 'date + array is date'); + t.end(); +}); + +test('merge date with date', function (t) { + var ori = new Date(81, 9, 20); + var target = extend(ori, date); + + t.deepEqual(ori, {}, 'date is empty object'); + t.deepEqual(target, {}, 'date + date is empty object'); + t.end(); +}); + +test('merge date with object', function (t) { + var ori = new Date(81, 9, 20); + var target = extend(ori, obj); + var testDate = new Date(81, 8, 4); + var testObject = { + str: 'me a test', + integer: 10, + arr: [1, 'what', testDate], + date: new Date(81, 4, 13), + constructor: 'fake', + isPrototypeOf: 'not a function', + foo: new Foo() + }; + + t.deepEqual(obj, testObject, 'original object is unchanged'); + t.deepEqual(ori, testObject, 'date becomes original object'); + t.deepEqual(target, testObject, 'date + object is object'); + t.end(); +}); + +test('merge object with string', function (t) { + var testDate = new Date(81, 7, 26); + var ori = { + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: testDate + }; + var target = extend(ori, str); + var testObj = { + 0: 'm', + 1: 'e', + 2: ' ', + 3: 'a', + 4: ' ', + 5: 't', + 6: 'e', + 7: 's', + 8: 't', + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: testDate + }; + + t.deepEqual(ori, testObj, 'original object updated'); + t.equal(str, 'me a test', 'string is unchanged'); + t.deepEqual(target, testObj, 'object + string is object + object form of string'); + t.end(); +}); + +test('merge object with number', function (t) { + var ori = { + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: new Date(81, 7, 26) + }; + var testObject = { + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: new Date(81, 7, 26) + }; + var target = extend(ori, 10); + t.deepEqual(ori, testObject, 'object is unchanged'); + t.deepEqual(target, testObject, 'object + number is object'); + t.end(); +}); + +test('merge object with array', function (t) { + var ori = { + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: new Date(81, 7, 26) + }; + var target = extend(ori, arr); + var testObject = { + 0: 1, + 1: 'what', + 2: new Date(81, 8, 4), + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: new Date(81, 7, 26) + }; + + t.deepEqual(ori, testObject, 'original object is merged'); + t.deepEqual(arr, [1, 'what', testObject[2]], 'array is unchanged'); + t.deepEqual(target, testObject, 'object + array is merged object'); + t.end(); +}); + +test('merge object with date', function (t) { + var ori = { + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: new Date(81, 7, 26) + }; + var target = extend(ori, date); + var testObject = { + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: new Date(81, 7, 26) + }; + + t.deepEqual(ori, testObject, 'original object is unchanged'); + t.deepEqual(date, new Date(81, 4, 13), 'date is unchanged'); + t.deepEqual(target, testObject, 'object + date is object'); + t.end(); +}); + +test('merge object with object', function (t) { + var ori = { + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: new Date(81, 7, 26), + foo: 'bar' + }; + var target = extend(ori, obj); + var expectedObj = { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 4, 13), + constructor: 'fake', + isPrototypeOf: 'not a function', + foo: new Foo() + }; + var expectedTarget = { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 4, 13), + constructor: 'fake', + isPrototypeOf: 'not a function', + foo: new Foo() + }; + + t.deepEqual(obj, expectedObj, 'obj is unchanged'); + t.deepEqual(ori, expectedTarget, 'original has been merged'); + t.deepEqual(target, expectedTarget, 'object + object is merged object'); + t.end(); +}); + +test('deep clone', function (t) { + var ori = { + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: new Date(81, 7, 26), + layer: { + deep: { + integer: 42 + } + } + }; + var target = extend(true, ori, deep); + + t.deepEqual(ori, { + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: new Date(81, 7, 26), + ori: { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 4, 13), + constructor: 'fake', + isPrototypeOf: 'not a function', + foo: new Foo() + }, + layer: { + integer: 10, + str: 'str', + date: new Date(84, 5, 12), + arr: [101, 'dude', new Date(82, 10, 4)], + deep: { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 7, 4) + } + } + }, 'original object is merged'); + t.deepEqual(deep, { + ori: { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 4, 13), + constructor: 'fake', + isPrototypeOf: 'not a function', + foo: new Foo() + }, + layer: { + integer: 10, + str: 'str', + date: new Date(84, 5, 12), + arr: [101, 'dude', new Date(82, 10, 4)], + deep: { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 7, 4) + } + } + }, 'deep is unchanged'); + t.deepEqual(target, { + str: 'no shit', + integer: 76, + arr: [1, 2, 3, 4], + date: new Date(81, 7, 26), + ori: { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 4, 13), + constructor: 'fake', + isPrototypeOf: 'not a function', + foo: new Foo() + }, + layer: { + integer: 10, + str: 'str', + date: new Date(84, 5, 12), + arr: [101, 'dude', new Date(82, 10, 4)], + deep: { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 7, 4) + } + } + }, 'deep + object + object is deeply merged object'); + + target.layer.deep = 339; + t.deepEqual(deep, { + ori: { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 4, 13), + constructor: 'fake', + isPrototypeOf: 'not a function', + foo: new Foo() + }, + layer: { + integer: 10, + str: 'str', + date: new Date(84, 5, 12), + arr: [101, 'dude', new Date(82, 10, 4)], + deep: { + str: 'me a test', + integer: 10, + arr: [1, 'what', new Date(81, 8, 4)], + date: new Date(81, 7, 4) + } + } + }, 'deep is unchanged after setting target property'); + // ----- NEVER USE EXTEND WITH THE ABOVE SITUATION ------------------------------ + t.end(); +}); + +test('deep clone; arrays are merged', function (t) { + var defaults = { + arr: [1, 2, 3] + }; + var override = { + arr: ['x'] + }; + var expectedTarget = { + arr: ['x', 2, 3] + }; + + var target = extend(true, defaults, override); + + t.deepEqual(target, expectedTarget, 'arrays are merged'); + t.end(); +}); + +test('deep clone === false; objects merged normally', function (t) { + var defaults = { + a: 1 + }; + var override = { + a: 2 + }; + var target = extend(false, defaults, override); + t.deepEqual(target, override, 'deep === false handled normally'); + t.end(); +}); + +test('pass in null; should create a valid object', function (t) { + var override = { + a: 1 + }; + var target = extend(null, override); + t.deepEqual(target, override, 'null object handled normally'); + t.end(); +}); + +test('works without Array.isArray', function (t) { + var savedIsArray = Array.isArray; + Array.isArray = false; // don't delete, to preserve enumerability + var target = []; + var source = [1, [2], { 3: true }]; + t.deepEqual( + extend(true, target, source), + [1, [2], { 3: true }], + 'It works without Array.isArray' + ); + Array.isArray = savedIsArray; + t.end(); +}); -- Gitee From 4f909178f9facf1a4e8651157958936f1b6a05dc Mon Sep 17 00:00:00 2001 From: fwx913451 Date: Tue, 8 Sep 2020 10:31:36 +0800 Subject: [PATCH 2/2] fuanan add package --- extend-3.0.0.tgz | Bin 6771 -> 0 bytes nodejs-extend.spec | 6 +++--- nodejs-extend.yaml | 7 +++---- v3.0.0.tar.gz | Bin 0 -> 9021 bytes 4 files changed, 6 insertions(+), 7 deletions(-) delete mode 100644 extend-3.0.0.tgz create mode 100644 v3.0.0.tar.gz diff --git a/extend-3.0.0.tgz b/extend-3.0.0.tgz deleted file mode 100644 index 42c0c69e31bee98d26ef18ae4c843ee5a5b13f46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6771 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 VU-#Gjb$_MT{{p^akktTc002o`3A6wJ diff --git a/nodejs-extend.spec b/nodejs-extend.spec index f2db05b..5f97df3 100644 --- a/nodejs-extend.spec +++ b/nodejs-extend.spec @@ -6,8 +6,8 @@ Version: 3.0.0 Release: 1 Summary: Port of jQuery.extend for node.js and the browser License: MIT -URL: https://www.npmjs.org/package/extend -Source0: https://registry.npmjs.org/extend/-/extend-%{version}.tgz +URL: https://github.com/justmoon/node-extend +Source0: https://github.com/justmoon/node-extend/archive/v%{version}.tar.gz Source1: test-index.js BuildArch: noarch ExclusiveArch: %{nodejs_arches} noarch @@ -21,7 +21,7 @@ nodejs-extend is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true. %prep -%setup -q -n package +%autosetup -n node-extend-%{version} install -D -p -m0644 %{SOURCE1} test/index.js rm -rf node_modules/ %nodejs_fixdep --caret diff --git a/nodejs-extend.yaml b/nodejs-extend.yaml index 762fbe5..7c9fd91 100644 --- a/nodejs-extend.yaml +++ b/nodejs-extend.yaml @@ -1,5 +1,4 @@ -git_url: https://www.npmjs.org/package/extend -version_control: registry -src_repo: https://registry.npmjs.org/extend/- -tag_prefix: "^" +version_control: github +src_repo: justmoon/node-extend +tag_prefix: "^v" seperator: "." diff --git a/v3.0.0.tar.gz b/v3.0.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c5d673115a109853f9f9d63728864fdff9467ef2 GIT binary patch literal 9021 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 literal 0 HcmV?d00001 -- Gitee