@useinsider/eslint-config 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +27 -24
- package/dist/cli.cjs.map +1 -1
- package/dist/configs/typescript-dom/index.d.ts +13 -3
- package/dist/configs/vue2/index.d.ts +13 -3
- package/dist/configs/vue2-options-api/index.d.ts +13 -3
- package/dist/configs/vue3/index.d.ts +13 -3
- package/dist/configs/vue3-options-api/index.d.ts +13 -3
- package/dist/{javascript-DZ8AUcFu.js → javascript-9ynvToz3.js} +4 -4
- package/dist/{javascript-DZ8AUcFu.js.map → javascript-9ynvToz3.js.map} +1 -1
- package/dist/{javascript-9tQ9nS7g.cjs → javascript-VBXqjVi8.cjs} +7 -7
- package/dist/{javascript-9tQ9nS7g.cjs.map → javascript-VBXqjVi8.cjs.map} +1 -1
- package/dist/javascript-dom-5jRL_yKP.cjs +11 -0
- package/dist/{javascript-dom-Duiy5LQP.cjs.map → javascript-dom-5jRL_yKP.cjs.map} +1 -1
- package/dist/{javascript-dom-DaclGNp-.js → javascript-dom-B1wtLzJC.js} +3 -3
- package/dist/{javascript-dom-DaclGNp-.js.map → javascript-dom-B1wtLzJC.js.map} +1 -1
- package/dist/javascript-node-C1AU_4X2.cjs +11 -0
- package/dist/{javascript-node-42x75ZCz.cjs.map → javascript-node-C1AU_4X2.cjs.map} +1 -1
- package/dist/{javascript-node-CbCig5az.js → javascript-node-JaASOojH.js} +3 -3
- package/dist/{javascript-node-CbCig5az.js.map → javascript-node-JaASOojH.js.map} +1 -1
- package/dist/{jest-qLSuDnJy.cjs → jest-CHzjzBtf.cjs} +3 -3
- package/dist/{jest-qLSuDnJy.cjs.map → jest-CHzjzBtf.cjs.map} +1 -1
- package/dist/jest-zpwEzF4X.js.map +1 -1
- package/dist/jsdoc-based-ts-Cfahz0nn.cjs.map +1 -1
- package/dist/jsdoc-based-ts-D7tlky3K.js.map +1 -1
- package/dist/main.cjs +30 -28
- package/dist/main.cjs.map +1 -1
- package/dist/main.js +25 -23
- package/dist/main.js.map +1 -1
- package/dist/{merge-8QYHxTjU.cjs → merge-DJQU2y2U.cjs} +3 -3
- package/dist/merge-DJQU2y2U.cjs.map +1 -0
- package/dist/{merge-CXnhrNEt.js → merge-R5ZHqMsV.js} +3 -3
- package/dist/merge-R5ZHqMsV.js.map +1 -0
- package/dist/{mergeAllConfig-DD9aslCE.js → mergeAllConfig-B2rSXCdn.js} +2 -2
- package/dist/{mergeAllConfig-DD9aslCE.js.map → mergeAllConfig-B2rSXCdn.js.map} +1 -1
- package/dist/{mergeAllConfig-CJpF6W3i.cjs → mergeAllConfig-DjMWjBNg.cjs} +2 -2
- package/dist/{mergeAllConfig-CJpF6W3i.cjs.map → mergeAllConfig-DjMWjBNg.cjs.map} +1 -1
- package/dist/removePluginsFromConfigs-D0oSUj2C.cjs.map +1 -1
- package/dist/removePluginsFromConfigs-DzqX2Ju2.js.map +1 -1
- package/dist/{chunk-D6vf50IK.cjs → rolldown-runtime-VH7oDXx4.cjs} +1 -1
- package/dist/{strict-BvBxnZVo.js → strict-B2mCkeX_.js} +2 -2
- package/dist/{strict-BvBxnZVo.js.map → strict-B2mCkeX_.js.map} +1 -1
- package/dist/{strict-C7c_fc3d.cjs → strict-tmp-wKop.cjs} +2 -2
- package/dist/{strict-C7c_fc3d.cjs.map → strict-tmp-wKop.cjs.map} +1 -1
- package/dist/{stylistic-DwB496Pa.js → stylistic-B6j4I_aN.js} +2 -2
- package/dist/{stylistic-DwB496Pa.js.map → stylistic-B6j4I_aN.js.map} +1 -1
- package/dist/{stylistic-D9tHaeG4.cjs → stylistic-Dio0AM2E.cjs} +5 -5
- package/dist/{stylistic-D9tHaeG4.cjs.map → stylistic-Dio0AM2E.cjs.map} +1 -1
- package/dist/{typescript-BDc8Y6Hc.cjs → typescript-C1icmOxY.cjs} +9 -9
- package/dist/{typescript-BDc8Y6Hc.cjs.map → typescript-C1icmOxY.cjs.map} +1 -1
- package/dist/{typescript-CDhrDEoi.js → typescript-C7Xg57WE.js} +4 -4
- package/dist/{typescript-CDhrDEoi.js.map → typescript-C7Xg57WE.js.map} +1 -1
- package/dist/{typescript-dom-CexiRZAz.js → typescript-dom-ClE8ufzf.js} +3 -3
- package/dist/{typescript-dom-CexiRZAz.js.map → typescript-dom-ClE8ufzf.js.map} +1 -1
- package/dist/{typescript-dom-xYDL7O9g.cjs → typescript-dom-RUJn2WCZ.cjs} +5 -5
- package/dist/{typescript-dom-xYDL7O9g.cjs.map → typescript-dom-RUJn2WCZ.cjs.map} +1 -1
- package/dist/typescript-node-CBEzcc56.cjs +11 -0
- package/dist/{typescript-node-BjpTUbKF.cjs.map → typescript-node-CBEzcc56.cjs.map} +1 -1
- package/dist/{typescript-node-B8TpRcjd.js → typescript-node-CbViUIa8.js} +3 -3
- package/dist/{typescript-node-B8TpRcjd.js.map → typescript-node-CbViUIa8.js.map} +1 -1
- package/dist/{vitest-Xhsz8y7q.cjs → vitest-BomI8gtu.cjs} +3 -3
- package/dist/{vitest-Xhsz8y7q.cjs.map → vitest-BomI8gtu.cjs.map} +1 -1
- package/dist/vitest-Cdq7Gq88.js.map +1 -1
- package/dist/vue-2Tf2LIPf.cjs.map +1 -1
- package/dist/vue-Bg3R-yZT.js.map +1 -1
- package/dist/vue-options-api-9KoVvBkF.cjs.map +1 -1
- package/dist/vue-options-api-Bnzaw9Tz.js.map +1 -1
- package/dist/vue2-CVSRM5hR.js.map +1 -1
- package/dist/{vue2-G2Q58B8-.js → vue2-CYgPhPVM.js} +4 -4
- package/dist/{vue2-G2Q58B8-.js.map → vue2-CYgPhPVM.js.map} +1 -1
- package/dist/vue2-CwpD2fD-.cjs.map +1 -1
- package/dist/{vue2-DAi-TxWE.cjs → vue2-azKwRgaJ.cjs} +10 -10
- package/dist/{vue2-DAi-TxWE.cjs.map → vue2-azKwRgaJ.cjs.map} +1 -1
- package/dist/{vue2-options-api-CKnW7uvJ.js → vue2-options-api-Dvem0WyV.js} +4 -4
- package/dist/{vue2-options-api-CKnW7uvJ.js.map → vue2-options-api-Dvem0WyV.js.map} +1 -1
- package/dist/{vue2-options-api-DHnhmw3v.cjs → vue2-options-api-ma3J-bvM.cjs} +10 -10
- package/dist/{vue2-options-api-DHnhmw3v.cjs.map → vue2-options-api-ma3J-bvM.cjs.map} +1 -1
- package/dist/{vue2-typescript-DgXglO8R.js → vue2-typescript-BbhsVbsV.js} +4 -4
- package/dist/{vue2-typescript-DgXglO8R.js.map → vue2-typescript-BbhsVbsV.js.map} +1 -1
- package/dist/{vue2-typescript-CcuFB-YB.cjs → vue2-typescript-CZSHzp7I.cjs} +12 -12
- package/dist/{vue2-typescript-CcuFB-YB.cjs.map → vue2-typescript-CZSHzp7I.cjs.map} +1 -1
- package/dist/vue2-typescript-Cr8IshuA.cjs.map +1 -1
- package/dist/vue2-typescript-DWnsb3uv.js.map +1 -1
- package/dist/{vue2-typescript-options-api-DsejF_KX.js → vue2-typescript-options-api-A5jU6hdD.js} +4 -4
- package/dist/{vue2-typescript-options-api-DsejF_KX.js.map → vue2-typescript-options-api-A5jU6hdD.js.map} +1 -1
- package/dist/{vue2-typescript-options-api-2fugBIOF.cjs → vue2-typescript-options-api-B8OzZlje.cjs} +12 -12
- package/dist/{vue2-typescript-options-api-2fugBIOF.cjs.map → vue2-typescript-options-api-B8OzZlje.cjs.map} +1 -1
- package/dist/{vue3-CJAdAg73.cjs → vue3-Df5UQ1Ys.cjs} +10 -10
- package/dist/{vue3-CJAdAg73.cjs.map → vue3-Df5UQ1Ys.cjs.map} +1 -1
- package/dist/{vue3-CADfXE8I.js → vue3-haIiBEhv.js} +4 -4
- package/dist/{vue3-CADfXE8I.js.map → vue3-haIiBEhv.js.map} +1 -1
- package/dist/{vue3-options-api-D2Wub1Oy.cjs → vue3-options-api-Bx7yYHza.cjs} +10 -10
- package/dist/{vue3-options-api-D2Wub1Oy.cjs.map → vue3-options-api-Bx7yYHza.cjs.map} +1 -1
- package/dist/{vue3-options-api-DFWOX_UU.js → vue3-options-api-DkF4JagY.js} +4 -4
- package/dist/{vue3-options-api-DFWOX_UU.js.map → vue3-options-api-DkF4JagY.js.map} +1 -1
- package/dist/{vue3-typescript-DlncdT6z.js → vue3-typescript-BRN2iL98.js} +4 -4
- package/dist/{vue3-typescript-DlncdT6z.js.map → vue3-typescript-BRN2iL98.js.map} +1 -1
- package/dist/{vue3-typescript-DLfJPXTc.cjs → vue3-typescript-C0O1JZlk.cjs} +12 -12
- package/dist/{vue3-typescript-DLfJPXTc.cjs.map → vue3-typescript-C0O1JZlk.cjs.map} +1 -1
- package/dist/{vue3-typescript-options-api-CorDmhg0.js → vue3-typescript-options-api-BZ-QVwuD.js} +4 -4
- package/dist/{vue3-typescript-options-api-CorDmhg0.js.map → vue3-typescript-options-api-BZ-QVwuD.js.map} +1 -1
- package/dist/{vue3-typescript-options-api-Cn4u57BK.cjs → vue3-typescript-options-api-cPal4O-K.cjs} +12 -12
- package/dist/{vue3-typescript-options-api-Cn4u57BK.cjs.map → vue3-typescript-options-api-cPal4O-K.cjs.map} +1 -1
- package/package.json +40 -40
- package/dist/javascript-dom-Duiy5LQP.cjs +0 -11
- package/dist/javascript-node-42x75ZCz.cjs +0 -11
- package/dist/merge-8QYHxTjU.cjs.map +0 -1
- package/dist/merge-CXnhrNEt.js.map +0 -1
- package/dist/typescript-node-BjpTUbKF.cjs +0 -11
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-8QYHxTjU.cjs","names":[],"sources":["../../utils/dist/index.js","../src/utils/merge.ts"],"sourcesContent":["//#region src/merge.ts\nvar UNSAFE_KEYS = new Set([\n\t\"__proto__\",\n\t\"constructor\",\n\t\"prototype\",\n\t\"toString\",\n\t\"valueOf\",\n\t\"hasOwnProperty\",\n\t\"isPrototypeOf\",\n\t\"propertyIsEnumerable\",\n\t\"toLocaleString\"\n]);\nvar defaultOptions = {\n\tallowUndefinedOverrides: true,\n\tmergeArrays: true,\n\tuniqueArrayItems: true\n};\nfunction isMergeableObject(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === Object.prototype || prototype === null;\n}\nfunction combineArrays(options, previous, next) {\n\tif (!options.mergeArrays) return next;\n\treturn options.uniqueArrayItems ? [...new Set([...previous, ...next])] : [...previous, ...next];\n}\nfunction mergeSources(options, sources) {\n\treturn sources.reduce((result, source) => {\n\t\tif (Array.isArray(source)) throw new TypeError(\"Arguments provided to merge must be objects, not arrays.\");\n\t\tObject.keys(source).forEach((key) => {\n\t\t\tif (UNSAFE_KEYS.has(key)) return;\n\t\t\tconst previous = result[key];\n\t\t\tconst next = source[key];\n\t\t\tif (Array.isArray(previous) && Array.isArray(next)) result[key] = combineArrays(options, previous, next);\n\t\t\telse if (isMergeableObject(previous) && isMergeableObject(next)) result[key] = mergeSources(options, [previous, next]);\n\t\t\telse result[key] = next === void 0 && !options.allowUndefinedOverrides ? previous : next;\n\t\t});\n\t\treturn result;\n\t}, {});\n}\n/**\n* Recursively merges `sources` left to right into a fresh object, skipping keys that would\n* poison `Object.prototype`.\n* @example\n* deepMerge({ branches: ['main'] }, { branches: ['beta'] });\n* // => { branches: ['main', 'beta'] }\n*/\nfunction deepMerge(...sources) {\n\treturn mergeSources(defaultOptions, sources);\n}\n/**\n* {@link deepMerge} with the merge strategy tuned per call.\n* @example\n* deepMergeWithOptions({ mergeArrays: false }, { branches: ['main'] }, { branches: ['beta'] });\n* // => { branches: ['beta'] }\n* @param options Only the fields being overridden; every omitted field keeps its default.\n*/\nfunction deepMergeWithOptions(options, ...sources) {\n\treturn mergeSources({\n\t\t...defaultOptions,\n\t\t...options\n\t}, sources);\n}\n//#endregion\nexport { deepMerge, deepMergeWithOptions };\n\n//# sourceMappingURL=index.js.map","// eslint-disable-next-line import-x/no-extraneous-dependencies -- private workspace package, bundled into dist/ at build time; a runtime dependency entry would be unresolvable for consumers\nimport { deepMergeWithOptions } from '@useinsider/utils';\n\nexport function merge<Arguments extends NonNullable<unknown>[]> (...args: Arguments): Arguments[number] {\n return deepMergeWithOptions({ mergeArrays: false }, ...args);\n}\n\n/* v8 ignore start */\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest;\n\n describe('merge', () => {\n test('later arguments override earlier ones on overlapping keys', () => {\n const result = merge(\n { rules: { 'no-console': 'error' } },\n { rules: { 'no-console': 'off' } }\n );\n\n expect(result).toStrictEqual({ rules: { 'no-console': 'off' } });\n });\n\n test('precedence holds across three or more arguments', () => {\n const result = merge(\n { rules: { indent: 'off' } },\n { rules: { indent: 'warn' } },\n { rules: { indent: 'error' } }\n );\n\n expect(result).toStrictEqual({ rules: { indent: 'error' } });\n });\n\n test('non-overlapping keys from every argument are preserved', () => {\n const result = merge(\n { rules: { 'no-console': 'error' } },\n { rules: { 'no-debugger': 'warn' } },\n { languageOptions: { ecmaVersion: 2022 } }\n );\n\n expect(result).toStrictEqual({\n rules: {\n 'no-console': 'error',\n 'no-debugger': 'warn',\n },\n languageOptions: { ecmaVersion: 2022 },\n });\n });\n\n test('rule option arrays are replaced wholesale, never concatenated', () => {\n const result = merge(\n { rules: { quotes: ['error', 'double'] } },\n { rules: { quotes: ['error', 'single', { avoidEscape: true }] } }\n );\n\n expect(result).toStrictEqual({\n rules: { quotes: ['error', 'single', { avoidEscape: true }] },\n });\n });\n\n test('files arrays are replaced so a later block fully owns its globs', () => {\n const result = merge(\n { files: ['**/*.js'] },\n { files: ['**/*.ts'] }\n );\n\n expect(result).toStrictEqual({ files: ['**/*.ts'] });\n });\n\n test('deeply nested settings merge key-by-key with later winning', () => {\n const result = merge(\n { settings: { jsdoc: { mode: 'typescript', tagNamePreference: { returns: 'returns' } } } },\n { settings: { jsdoc: { tagNamePreference: { returns: 'return' } } } }\n );\n\n expect(result).toStrictEqual({\n settings: {\n jsdoc: {\n mode: 'typescript',\n tagNamePreference: { returns: 'return' },\n },\n },\n });\n });\n\n test('self-referential plugin objects merge without unbounded recursion', () => {\n const plugin: Record<string, unknown> = { rules: {} };\n\n plugin.configs = { recommended: { plugins: { fake: plugin } } };\n\n const result = merge({}, { plugins: { fake: plugin } }) as { plugins: { fake: unknown } };\n\n expect(result.plugins.fake).toBe(plugin);\n });\n\n test('prototype-polluting keys never reach Object.prototype', () => {\n const payload = JSON.parse('{\"__proto__\":{\"polluted\":true},\"constructor\":{\"polluted\":true}}') as object;\n\n merge({}, payload);\n\n expect(({} as Record<string, unknown>).polluted).toBeUndefined();\n expect(Object.prototype).not.toHaveProperty('polluted');\n });\n\n test('Object.prototype method keys are dropped so the result stays usable as a string', () => {\n const payload = {\n toString: 'not-a-function',\n valueOf: 1,\n hasOwnProperty: null,\n isPrototypeOf: 0,\n propertyIsEnumerable: false,\n toLocaleString: ['nope'],\n };\n\n const result = merge({ rules: { semi: 'error' } }, payload) as Record<string, unknown>;\n // eslint-disable-next-line @typescript-eslint/no-base-to-string -- default stringification is exactly what this CVE regression asserts\n const stringify = () => String(result);\n\n expect(Object.keys(result)).toStrictEqual(['rules']);\n expect(typeof result.toString).toBe('function');\n expect(typeof result.valueOf).toBe('function');\n expect(typeof result.hasOwnProperty).toBe('function');\n expect(stringify).not.toThrow();\n expect(stringify()).toBe('[object Object]');\n });\n\n test('nested Object.prototype method keys are dropped too', () => {\n const result = merge(\n { settings: { shared: { name: 'insider' } } },\n { settings: { shared: { toString: 'not-a-function' } } }\n ) as { settings: { shared: Record<string, unknown> } };\n\n expect(result.settings.shared).toStrictEqual({ name: 'insider' });\n // eslint-disable-next-line @typescript-eslint/no-base-to-string -- default stringification is exactly what this CVE regression asserts\n expect(String(result.settings.shared)).toBe('[object Object]');\n });\n\n test('null-prototype objects are still merged key-by-key', () => {\n const bare = Object.create(null) as Record<string, unknown>;\n\n bare.semi = 'error';\n\n const result = merge({ rules: bare }, { rules: { quotes: 'error' } }) as { rules: unknown };\n\n expect(result.rules).toStrictEqual({ semi: 'error', quotes: 'error' });\n });\n\n test('array arguments are rejected', () => {\n expect(() => merge({}, ['not-an-object'])).toThrow(TypeError);\n });\n });\n}\n"],"mappings":";AACA,IAAI,cAAc,IAAI,IAAI;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,CAAC;AACD,IAAI,iBAAiB;CACpB,yBAAyB;CACzB,aAAa;CACb,kBAAkB;AACnB;AACA,SAAS,kBAAkB,OAAO;CACjC,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO;CACxD,MAAM,YAAY,OAAO,eAAe,KAAK;CAC7C,OAAO,cAAc,OAAO,aAAa,cAAc;AACxD;AACA,SAAS,cAAc,SAAS,UAAU,MAAM;CAC/C,IAAI,CAAC,QAAQ,aAAa,OAAO;CACjC,OAAO,QAAQ,mBAAmB,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,IAAI;AAC/F;AACA,SAAS,aAAa,SAAS,SAAS;CACvC,OAAO,QAAQ,QAAQ,QAAQ,WAAW;EACzC,IAAI,MAAM,QAAQ,MAAM,GAAG,MAAM,IAAI,UAAU,0DAA0D;EACzG,OAAO,KAAK,MAAM,EAAE,SAAS,QAAQ;GACpC,IAAI,YAAY,IAAI,GAAG,GAAG;GAC1B,MAAM,WAAW,OAAO;GACxB,MAAM,OAAO,OAAO;GACpB,IAAI,MAAM,QAAQ,QAAQ,KAAK,MAAM,QAAQ,IAAI,GAAG,OAAO,OAAO,cAAc,SAAS,UAAU,IAAI;QAClG,IAAI,kBAAkB,QAAQ,KAAK,kBAAkB,IAAI,GAAG,OAAO,OAAO,aAAa,SAAS,CAAC,UAAU,IAAI,CAAC;QAChH,OAAO,OAAO,SAAS,KAAK,KAAK,CAAC,QAAQ,0BAA0B,WAAW;EACrF,CAAC;EACD,OAAO;CACR,GAAG,CAAC,CAAC;AACN;;;;;;;;AAkBA,SAAS,qBAAqB,SAAS,GAAG,SAAS;CAClD,OAAO,aAAa;EACnB,GAAG;EACH,GAAG;CACJ,GAAG,OAAO;AACX;;;AC3DA,SAAgB,MAAiD,GAAG,MAAe;CAC/E,OAAO,qBAAqB,EAAE,aAAa,MAAK,GAAI,GAAG,IAAI;AAC/D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-CXnhrNEt.js","names":[],"sources":["../../utils/dist/index.js","../src/utils/merge.ts"],"sourcesContent":["//#region src/merge.ts\nvar UNSAFE_KEYS = new Set([\n\t\"__proto__\",\n\t\"constructor\",\n\t\"prototype\",\n\t\"toString\",\n\t\"valueOf\",\n\t\"hasOwnProperty\",\n\t\"isPrototypeOf\",\n\t\"propertyIsEnumerable\",\n\t\"toLocaleString\"\n]);\nvar defaultOptions = {\n\tallowUndefinedOverrides: true,\n\tmergeArrays: true,\n\tuniqueArrayItems: true\n};\nfunction isMergeableObject(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === Object.prototype || prototype === null;\n}\nfunction combineArrays(options, previous, next) {\n\tif (!options.mergeArrays) return next;\n\treturn options.uniqueArrayItems ? [...new Set([...previous, ...next])] : [...previous, ...next];\n}\nfunction mergeSources(options, sources) {\n\treturn sources.reduce((result, source) => {\n\t\tif (Array.isArray(source)) throw new TypeError(\"Arguments provided to merge must be objects, not arrays.\");\n\t\tObject.keys(source).forEach((key) => {\n\t\t\tif (UNSAFE_KEYS.has(key)) return;\n\t\t\tconst previous = result[key];\n\t\t\tconst next = source[key];\n\t\t\tif (Array.isArray(previous) && Array.isArray(next)) result[key] = combineArrays(options, previous, next);\n\t\t\telse if (isMergeableObject(previous) && isMergeableObject(next)) result[key] = mergeSources(options, [previous, next]);\n\t\t\telse result[key] = next === void 0 && !options.allowUndefinedOverrides ? previous : next;\n\t\t});\n\t\treturn result;\n\t}, {});\n}\n/**\n* Recursively merges `sources` left to right into a fresh object, skipping keys that would\n* poison `Object.prototype`.\n* @example\n* deepMerge({ branches: ['main'] }, { branches: ['beta'] });\n* // => { branches: ['main', 'beta'] }\n*/\nfunction deepMerge(...sources) {\n\treturn mergeSources(defaultOptions, sources);\n}\n/**\n* {@link deepMerge} with the merge strategy tuned per call.\n* @example\n* deepMergeWithOptions({ mergeArrays: false }, { branches: ['main'] }, { branches: ['beta'] });\n* // => { branches: ['beta'] }\n* @param options Only the fields being overridden; every omitted field keeps its default.\n*/\nfunction deepMergeWithOptions(options, ...sources) {\n\treturn mergeSources({\n\t\t...defaultOptions,\n\t\t...options\n\t}, sources);\n}\n//#endregion\nexport { deepMerge, deepMergeWithOptions };\n\n//# sourceMappingURL=index.js.map","// eslint-disable-next-line import-x/no-extraneous-dependencies -- private workspace package, bundled into dist/ at build time; a runtime dependency entry would be unresolvable for consumers\nimport { deepMergeWithOptions } from '@useinsider/utils';\n\nexport function merge<Arguments extends NonNullable<unknown>[]> (...args: Arguments): Arguments[number] {\n return deepMergeWithOptions({ mergeArrays: false }, ...args);\n}\n\n/* v8 ignore start */\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest;\n\n describe('merge', () => {\n test('later arguments override earlier ones on overlapping keys', () => {\n const result = merge(\n { rules: { 'no-console': 'error' } },\n { rules: { 'no-console': 'off' } }\n );\n\n expect(result).toStrictEqual({ rules: { 'no-console': 'off' } });\n });\n\n test('precedence holds across three or more arguments', () => {\n const result = merge(\n { rules: { indent: 'off' } },\n { rules: { indent: 'warn' } },\n { rules: { indent: 'error' } }\n );\n\n expect(result).toStrictEqual({ rules: { indent: 'error' } });\n });\n\n test('non-overlapping keys from every argument are preserved', () => {\n const result = merge(\n { rules: { 'no-console': 'error' } },\n { rules: { 'no-debugger': 'warn' } },\n { languageOptions: { ecmaVersion: 2022 } }\n );\n\n expect(result).toStrictEqual({\n rules: {\n 'no-console': 'error',\n 'no-debugger': 'warn',\n },\n languageOptions: { ecmaVersion: 2022 },\n });\n });\n\n test('rule option arrays are replaced wholesale, never concatenated', () => {\n const result = merge(\n { rules: { quotes: ['error', 'double'] } },\n { rules: { quotes: ['error', 'single', { avoidEscape: true }] } }\n );\n\n expect(result).toStrictEqual({\n rules: { quotes: ['error', 'single', { avoidEscape: true }] },\n });\n });\n\n test('files arrays are replaced so a later block fully owns its globs', () => {\n const result = merge(\n { files: ['**/*.js'] },\n { files: ['**/*.ts'] }\n );\n\n expect(result).toStrictEqual({ files: ['**/*.ts'] });\n });\n\n test('deeply nested settings merge key-by-key with later winning', () => {\n const result = merge(\n { settings: { jsdoc: { mode: 'typescript', tagNamePreference: { returns: 'returns' } } } },\n { settings: { jsdoc: { tagNamePreference: { returns: 'return' } } } }\n );\n\n expect(result).toStrictEqual({\n settings: {\n jsdoc: {\n mode: 'typescript',\n tagNamePreference: { returns: 'return' },\n },\n },\n });\n });\n\n test('self-referential plugin objects merge without unbounded recursion', () => {\n const plugin: Record<string, unknown> = { rules: {} };\n\n plugin.configs = { recommended: { plugins: { fake: plugin } } };\n\n const result = merge({}, { plugins: { fake: plugin } }) as { plugins: { fake: unknown } };\n\n expect(result.plugins.fake).toBe(plugin);\n });\n\n test('prototype-polluting keys never reach Object.prototype', () => {\n const payload = JSON.parse('{\"__proto__\":{\"polluted\":true},\"constructor\":{\"polluted\":true}}') as object;\n\n merge({}, payload);\n\n expect(({} as Record<string, unknown>).polluted).toBeUndefined();\n expect(Object.prototype).not.toHaveProperty('polluted');\n });\n\n test('Object.prototype method keys are dropped so the result stays usable as a string', () => {\n const payload = {\n toString: 'not-a-function',\n valueOf: 1,\n hasOwnProperty: null,\n isPrototypeOf: 0,\n propertyIsEnumerable: false,\n toLocaleString: ['nope'],\n };\n\n const result = merge({ rules: { semi: 'error' } }, payload) as Record<string, unknown>;\n // eslint-disable-next-line @typescript-eslint/no-base-to-string -- default stringification is exactly what this CVE regression asserts\n const stringify = () => String(result);\n\n expect(Object.keys(result)).toStrictEqual(['rules']);\n expect(typeof result.toString).toBe('function');\n expect(typeof result.valueOf).toBe('function');\n expect(typeof result.hasOwnProperty).toBe('function');\n expect(stringify).not.toThrow();\n expect(stringify()).toBe('[object Object]');\n });\n\n test('nested Object.prototype method keys are dropped too', () => {\n const result = merge(\n { settings: { shared: { name: 'insider' } } },\n { settings: { shared: { toString: 'not-a-function' } } }\n ) as { settings: { shared: Record<string, unknown> } };\n\n expect(result.settings.shared).toStrictEqual({ name: 'insider' });\n // eslint-disable-next-line @typescript-eslint/no-base-to-string -- default stringification is exactly what this CVE regression asserts\n expect(String(result.settings.shared)).toBe('[object Object]');\n });\n\n test('null-prototype objects are still merged key-by-key', () => {\n const bare = Object.create(null) as Record<string, unknown>;\n\n bare.semi = 'error';\n\n const result = merge({ rules: bare }, { rules: { quotes: 'error' } }) as { rules: unknown };\n\n expect(result.rules).toStrictEqual({ semi: 'error', quotes: 'error' });\n });\n\n test('array arguments are rejected', () => {\n expect(() => merge({}, ['not-an-object'])).toThrow(TypeError);\n });\n });\n}\n"],"mappings":";AACA,IAAI,cAAc,IAAI,IAAI;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,CAAC;AACD,IAAI,iBAAiB;CACpB,yBAAyB;CACzB,aAAa;CACb,kBAAkB;AACnB;AACA,SAAS,kBAAkB,OAAO;CACjC,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO;CACxD,MAAM,YAAY,OAAO,eAAe,KAAK;CAC7C,OAAO,cAAc,OAAO,aAAa,cAAc;AACxD;AACA,SAAS,cAAc,SAAS,UAAU,MAAM;CAC/C,IAAI,CAAC,QAAQ,aAAa,OAAO;CACjC,OAAO,QAAQ,mBAAmB,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,IAAI;AAC/F;AACA,SAAS,aAAa,SAAS,SAAS;CACvC,OAAO,QAAQ,QAAQ,QAAQ,WAAW;EACzC,IAAI,MAAM,QAAQ,MAAM,GAAG,MAAM,IAAI,UAAU,0DAA0D;EACzG,OAAO,KAAK,MAAM,EAAE,SAAS,QAAQ;GACpC,IAAI,YAAY,IAAI,GAAG,GAAG;GAC1B,MAAM,WAAW,OAAO;GACxB,MAAM,OAAO,OAAO;GACpB,IAAI,MAAM,QAAQ,QAAQ,KAAK,MAAM,QAAQ,IAAI,GAAG,OAAO,OAAO,cAAc,SAAS,UAAU,IAAI;QAClG,IAAI,kBAAkB,QAAQ,KAAK,kBAAkB,IAAI,GAAG,OAAO,OAAO,aAAa,SAAS,CAAC,UAAU,IAAI,CAAC;QAChH,OAAO,OAAO,SAAS,KAAK,KAAK,CAAC,QAAQ,0BAA0B,WAAW;EACrF,CAAC;EACD,OAAO;CACR,GAAG,CAAC,CAAC;AACN;;;;;;;;AAkBA,SAAS,qBAAqB,SAAS,GAAG,SAAS;CAClD,OAAO,aAAa;EACnB,GAAG;EACH,GAAG;CACJ,GAAG,OAAO;AACX;;;AC3DA,SAAgB,MAAiD,GAAG,MAAe;CAC/E,OAAO,qBAAqB,EAAE,aAAa,MAAK,GAAI,GAAG,IAAI;AAC/D"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
const require_chunk = require("./chunk-D6vf50IK.cjs");
|
|
2
|
-
const require_merge = require("./merge-8QYHxTjU.cjs");
|
|
3
|
-
const require_typescript = require("./typescript-BDc8Y6Hc.cjs");
|
|
4
|
-
let globals = require("globals");
|
|
5
|
-
globals = require_chunk.__toESM(globals, 1);
|
|
6
|
-
//#region src/configs/typescript-node/index.ts
|
|
7
|
-
var scope = require_merge.merge(require_typescript.default, { languageOptions: { globals: { ...globals.default.node } } });
|
|
8
|
-
//#endregion
|
|
9
|
-
exports.default = scope;
|
|
10
|
-
|
|
11
|
-
//# sourceMappingURL=typescript-node-BjpTUbKF.cjs.map
|