From c5ab64896a883cc7597002038286dbc932f049b1 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 25 Jun 2023 13:42:47 -0400 Subject: [PATCH 01/29] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4bb9080..71c7ede 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # `@foo-software/node-modules-compare` +**DISCLAIMER:** This project is in its early phases and not ready for use. + A tool to compare imported `node_modules` existence and size from one build to another ## Development From 1209bb9fea55e21134e43f2625f31b97762bc5c9 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Tue, 4 Jul 2023 19:45:37 -0400 Subject: [PATCH 02/29] feat: input options --- src/lib/getModules.test.ts | 4 +-- src/lib/getModules.ts | 4 +-- src/nodeModulesCompare.ts | 65 +++++++++++++++++++++++++++----------- src/types.ts | 4 +-- 4 files changed, 52 insertions(+), 25 deletions(-) diff --git a/src/lib/getModules.test.ts b/src/lib/getModules.test.ts index 83e62d8..0dbb1d3 100644 --- a/src/lib/getModules.test.ts +++ b/src/lib/getModules.test.ts @@ -1,7 +1,7 @@ -import { InputResult } from '../types'; +import { InputPayload } from '../types'; import { getModules } from './getModules'; -const mockResults: InputResult[] = [ +const mockResults: InputPayload[] = [ { bundleName: 'chunks/abc.123.js', files: { diff --git a/src/lib/getModules.ts b/src/lib/getModules.ts index d4a4a19..9adaf56 100644 --- a/src/lib/getModules.ts +++ b/src/lib/getModules.ts @@ -1,10 +1,10 @@ -import type { InputResult, ModuleCollection } from '../types'; +import type { InputPayload, ModuleCollection } from '../types'; export const getModules = ({ inputResults, onlyNodeModules, }: { - inputResults: InputResult[]; + inputResults: InputPayload[]; onlyNodeModules?: boolean; }): ModuleCollection => { const result = inputResults.reduce( diff --git a/src/nodeModulesCompare.ts b/src/nodeModulesCompare.ts index 846a9a1..ee17dd4 100644 --- a/src/nodeModulesCompare.ts +++ b/src/nodeModulesCompare.ts @@ -4,34 +4,55 @@ import { getInputFileContent } from './lib/getInputFileContent'; import { getModules } from './lib/getModules'; import { getNodeModuleCollectionDiff } from './lib/getNodeModuleCollectionDiff'; import { getNodeModules } from './lib/getNodeModules'; -import type { NodeModuleCollection, NodeModulesCompareResult } from './types'; +import type { + InputPayload, + NodeModuleCollection, + NodeModulesCompareResult, +} from './types'; export const nodeModulesCompare = async ({ + input, inputFile, inputFileWithChanges, + inputWithChanges, outputDirectory, shouldOmitNodeModuleData, }: { - /** The input file path relative to current working directory */ + /** The input payload (if not using `inputFile`) */ + input?: InputPayload[]; + + /** The input file path relative to current working directory (if not using `input` param) */ inputFile: string; - /** The input file with changes path relative to current working directory */ + /** The input file with changes path relative to current working directory (if not using `inputWithChanges` param) */ inputFileWithChanges?: string; - /** The output directory path relative to current working directory */ + /** The input with changes payload (if not using `inputFileWithChanges`) */ + inputWithChanges?: InputPayload[]; + + /** The output directory path relative to current working directory. If `undefined`, file will not be output */ outputDirectory?: string; /** If `true` node module data will be ommitted from the resulting dataset */ shouldOmitNodeModuleData?: boolean; }): Promise => { + // validate input + if (!input && !inputFile) { + throw new Error('Either `input` or `inputFile` must be provided'); + } + const currentWorkingDirectoryPath = process.cwd(); - const inputFileJsonContent = await getInputFileContent({ - inputFile, - }); + let inputResults: InputPayload[] | undefined = input; + if (!inputResults) { + const inputFileJsonContent = await getInputFileContent({ + inputFile, + }); + inputResults = inputFileJsonContent.results; + } const modules = getModules({ - inputResults: inputFileJsonContent.results, + inputResults, onlyNodeModules: true, }); const nodeModules = getNodeModules({ @@ -39,17 +60,23 @@ export const nodeModulesCompare = async ({ }); let nodeModulesWithChanges: NodeModuleCollection | undefined; - if (inputFileWithChanges) { - const inputFileJsonContentWithChanges = await getInputFileContent({ - inputFile: inputFileWithChanges, - }); - const modulesWithChanges = getModules({ - inputResults: inputFileJsonContentWithChanges.results, - onlyNodeModules: true, - }); - nodeModulesWithChanges = getNodeModules({ - modules: modulesWithChanges, - }); + if (inputWithChanges || inputFileWithChanges) { + let inputResultsWithChanges: InputPayload[] | undefined = inputWithChanges; + if (!inputResultsWithChanges && inputFileWithChanges) { + const inputFileJsonContentWithChanges = await getInputFileContent({ + inputFile: inputFileWithChanges, + }); + inputResultsWithChanges = inputFileJsonContentWithChanges.results; + } + if (inputResultsWithChanges) { + const modulesWithChanges = getModules({ + inputResults: inputResultsWithChanges, + onlyNodeModules: true, + }); + nodeModulesWithChanges = getNodeModules({ + modules: modulesWithChanges, + }); + } } const result: NodeModulesCompareResult = { diff --git a/src/types.ts b/src/types.ts index 9563e64..d384cee 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,10 +1,10 @@ -export interface InputResult { +export interface InputPayload { bundleName: string; files: Record; } export interface InputFileContent { - results: InputResult[]; + results: InputPayload[]; } export interface ModuleItem { From ec5a7dfb835b1024555a85715896ca53f1883732 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Tue, 4 Jul 2023 21:13:00 -0400 Subject: [PATCH 03/29] feat: tests --- src/lib/getNodeModules.test.ts | 68 +++++++++ src/nodeModulesCompare.test.ts | 268 +++++++++++++++++++++++++++++++++ src/nodeModulesCompare.ts | 10 +- 3 files changed, 344 insertions(+), 2 deletions(-) create mode 100644 src/lib/getNodeModules.test.ts create mode 100644 src/nodeModulesCompare.test.ts diff --git a/src/lib/getNodeModules.test.ts b/src/lib/getNodeModules.test.ts new file mode 100644 index 0000000..bbef7ac --- /dev/null +++ b/src/lib/getNodeModules.test.ts @@ -0,0 +1,68 @@ +import { ModuleCollection } from '../types'; +import { getNodeModules } from './getNodeModules'; + +const modules: ModuleCollection = { + 'node_modules/prismjs/components/prism-graphql.js': { + bundleDependents: ['chunks/hij.789.js'], + file: 'node_modules/prismjs/components/prism-graphql.js', + size: 2529, + }, + 'node_modules/prismjs/components/prism-jsx.js': { + bundleDependents: ['chunks/hij.789.js'], + file: 'node_modules/prismjs/components/prism-jsx.js', + size: 2434, + }, + 'node_modules/@material-ui/core/esm/styles/colorManipulator.js': { + bundleDependents: ['chunks/efg.456.js', 'chunks/hij.789.js'], + file: 'node_modules/@material-ui/core/esm/styles/colorManipulator.js', + size: 2422, + }, +}; + +describe('getModules', () => { + it('should return a Node module collection dataset', () => { + const result = getNodeModules({ + modules, + }); + expect(result).toEqual({ + prismjs: { + bundleDependents: { + 'chunks/hij.789.js': { + bundle: 'chunks/hij.789.js', + files: [ + 'node_modules/prismjs/components/prism-graphql.js', + 'node_modules/prismjs/components/prism-jsx.js', + ], + }, + }, + files: [ + 'node_modules/prismjs/components/prism-graphql.js', + 'node_modules/prismjs/components/prism-jsx.js', + ], + packageName: 'prismjs', + size: 4963, + }, + '@material-ui/core': { + bundleDependents: { + 'chunks/efg.456.js': { + bundle: 'chunks/efg.456.js', + files: [ + 'node_modules/@material-ui/core/esm/styles/colorManipulator.js', + ], + }, + 'chunks/hij.789.js': { + bundle: 'chunks/hij.789.js', + files: [ + 'node_modules/@material-ui/core/esm/styles/colorManipulator.js', + ], + }, + }, + files: [ + 'node_modules/@material-ui/core/esm/styles/colorManipulator.js', + ], + packageName: '@material-ui/core', + size: 2422, + }, + }); + }); +}); diff --git a/src/nodeModulesCompare.test.ts b/src/nodeModulesCompare.test.ts new file mode 100644 index 0000000..eacd72a --- /dev/null +++ b/src/nodeModulesCompare.test.ts @@ -0,0 +1,268 @@ +import { nodeModulesCompare } from './nodeModulesCompare'; +import { InputPayload } from './types'; + +const mockInputBase: InputPayload[] = [ + { + bundleName: './dist/chunks/abc.js', + files: { + 'node_modules/react-dom/index.js': { + size: 227, + }, + 'node_modules/react/cjs/react.production.min.js': { + size: 5946, + }, + 'node_modules/react-dom/cjs/react-dom.production.min.js': { + size: 118677, + }, + 'node_modules/prismjs/components/prism-bash.js': { + size: 5912, + }, + 'node_modules/prismjs/components/prism-core.js': { + size: 7269, + }, + 'node_modules/prismjs/components/prism-tsx.js': { + size: 239, + }, + 'node_modules/prismjs/components/prism-clike.js': { + size: 712, + }, + '[sourceMappingURL]': { + size: 57, + }, + '[unmapped]': { + size: 99, + }, + '[EOLs]': { + size: 1, + }, + }, + }, +]; + +const mockInputBase2: InputPayload[] = [ + ...mockInputBase, + { + bundleName: './dist/chunks/def.js', + files: { + 'node_modules/foo/index.js': { + size: 100, + }, + 'node_modules/react-dom/index.js': { + size: 227, + }, + 'node_modules/react-dom/cjs/react-dom.production.min.js': { + size: 118677, + }, + }, + }, +]; + +const mockInputBase3: InputPayload[] = [ + ...mockInputBase2, + { + bundleName: './dist/chunks/def.js', + files: { + 'node_modules/abc/index.js': { + size: 200, + }, + }, + }, +]; + +const mockInput: InputPayload[] = [ + ...mockInputBase3, + { + bundleName: './dist/chunks/hij.js', + files: { + 'node_modules/abc/index.js': { + size: 200, + }, + }, + }, +]; + +const mockResult = { + 'react-dom': { + bundleDependents: { + './dist/chunks/abc.js': { + bundle: './dist/chunks/abc.js', + files: [ + 'node_modules/react-dom/cjs/react-dom.production.min.js', + 'node_modules/react-dom/index.js', + ], + }, + './dist/chunks/def.js': { + bundle: './dist/chunks/def.js', + files: [ + 'node_modules/react-dom/cjs/react-dom.production.min.js', + 'node_modules/react-dom/index.js', + ], + }, + }, + files: [ + 'node_modules/react-dom/cjs/react-dom.production.min.js', + 'node_modules/react-dom/index.js', + ], + packageName: 'react-dom', + size: 118904, + }, + prismjs: { + bundleDependents: { + './dist/chunks/abc.js': { + bundle: './dist/chunks/abc.js', + files: [ + 'node_modules/prismjs/components/prism-core.js', + 'node_modules/prismjs/components/prism-bash.js', + 'node_modules/prismjs/components/prism-clike.js', + 'node_modules/prismjs/components/prism-tsx.js', + ], + }, + }, + files: [ + 'node_modules/prismjs/components/prism-core.js', + 'node_modules/prismjs/components/prism-bash.js', + 'node_modules/prismjs/components/prism-clike.js', + 'node_modules/prismjs/components/prism-tsx.js', + ], + packageName: 'prismjs', + size: 14132, + }, + react: { + bundleDependents: { + './dist/chunks/abc.js': { + bundle: './dist/chunks/abc.js', + files: ['node_modules/react/cjs/react.production.min.js'], + }, + }, + files: ['node_modules/react/cjs/react.production.min.js'], + packageName: 'react', + size: 5946, + }, + abc: { + bundleDependents: { + './dist/chunks/def.js': { + bundle: './dist/chunks/def.js', + files: ['node_modules/abc/index.js'], + }, + './dist/chunks/hij.js': { + bundle: './dist/chunks/hij.js', + files: ['node_modules/abc/index.js'], + }, + }, + files: ['node_modules/abc/index.js'], + packageName: 'abc', + size: 200, + }, + foo: { + bundleDependents: { + './dist/chunks/def.js': { + bundle: './dist/chunks/def.js', + files: ['node_modules/foo/index.js'], + }, + }, + files: ['node_modules/foo/index.js'], + packageName: 'foo', + size: 100, + }, +}; + +describe('nodeModulesCompare', () => { + it('should return a Node module compare result ', async () => { + const result = await nodeModulesCompare({ + input: mockInput, + inputWithChanges: [ + ...mockInputBase, + { + bundleName: './dist/chunks/def.js', + files: { + 'node_modules/foo/index.js': { + size: 100, + }, + 'node_modules/foo/some-other-module.js': { + size: 100, + }, + 'node_modules/react-dom/index.js': { + size: 227, + }, + 'node_modules/react-dom/cjs/react-dom.production.min.js': { + size: 118677, + }, + }, + }, + { + bundleName: './dist/chunks/hij.js', + files: { + 'node_modules/abc/index.js': { + size: 200, + }, + 'node_modules/react-dom/index.js': { + size: 227, + }, + }, + }, + { + bundleName: './dist/chunks/klm.js', + files: { + 'node_modules/foo/index.js': { + size: 100, + }, + 'node_modules/hi/index.js': { + size: 100, + }, + }, + }, + ], + shouldOmitNodeModuleData: true, + }); + expect(result).toEqual({ + diff: { + added: [ + { + bundleDependents: { + './dist/chunks/klm.js': { + bundle: './dist/chunks/klm.js', + files: ['node_modules/hi/index.js'], + }, + }, + files: ['node_modules/hi/index.js'], + packageName: 'hi', + size: 100, + }, + ], + changed: [ + { + bundleDependentCount: 1, + fileCount: 0, + packageName: 'react-dom', + size: 0, + }, + { + bundleDependentCount: -1, + fileCount: 0, + packageName: 'abc', + size: 0, + }, + { + bundleDependentCount: 0, + fileCount: 1, + packageName: 'foo', + size: 100, + }, + ], + removed: [], + totalBytes: 200, + }, + }); + }); + + it('should return a Node module compare result without a diff when there is no difference', async () => { + const result = await nodeModulesCompare({ + input: mockInput, + inputWithChanges: mockInput, + }); + expect(result).toEqual({ + nodeModules: mockResult, + nodeModulesWithChanges: mockResult, + }); + }); +}); diff --git a/src/nodeModulesCompare.ts b/src/nodeModulesCompare.ts index ee17dd4..a0bc804 100644 --- a/src/nodeModulesCompare.ts +++ b/src/nodeModulesCompare.ts @@ -22,7 +22,7 @@ export const nodeModulesCompare = async ({ input?: InputPayload[]; /** The input file path relative to current working directory (if not using `input` param) */ - inputFile: string; + inputFile?: string; /** The input file with changes path relative to current working directory (if not using `inputWithChanges` param) */ inputFileWithChanges?: string; @@ -44,13 +44,19 @@ export const nodeModulesCompare = async ({ const currentWorkingDirectoryPath = process.cwd(); let inputResults: InputPayload[] | undefined = input; - if (!inputResults) { + if (!inputResults && inputFile) { const inputFileJsonContent = await getInputFileContent({ inputFile, }); inputResults = inputFileJsonContent.results; } + if (!inputResults) { + throw new Error( + `There was a problem finding the input. Check that the input or input file is formatted correctly`, + ); + } + const modules = getModules({ inputResults, onlyNodeModules: true, From 4a4ca9084522cc6a41c7253577fe62d3646e87c3 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Tue, 4 Jul 2023 23:15:42 -0400 Subject: [PATCH 04/29] eat: docs --- README.md | 125 +++++++++++++++++++++++++++++++-- src/index.ts | 17 ++++- src/lib/getModules.test.ts | 4 +- src/lib/getModules.ts | 7 +- src/nodeModulesCompare.test.ts | 10 +-- src/nodeModulesCompare.ts | 11 +-- src/types.ts | 4 +- 7 files changed, 153 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 71c7ede..83e27b9 100644 --- a/README.md +++ b/README.md @@ -2,25 +2,136 @@ **DISCLAIMER:** This project is in its early phases and not ready for use. -A tool to compare imported `node_modules` existence and size from one build to another +A tool to compare imported `node_modules` existence and size from one build to another. -## Development +## Prerequisites + +- [`source-map-explorer`](https://github.com/danvk/source-map-explorer) is required to provide bundle data being compared. The input of this tool is the output of `source-map-explorer`. + +## Install + +```bash +npm install @foo-software/node-modules-compare +``` + +Or install globally for CLI usage: + +```bash +npm install -g @foo-software/node-modules-compare +``` + +## Usage + +#### Usage: Node Module + +```typescript +import { nodeModulesCompare } from '@foo-software/node-modules-compare'; + +const logNodeModulesCompareResult = async () => { + const result = await nodeModulesCompare({ + inputFile: '/path/to/input/input-file.json', + inputFileWithChanges: '/path/to/input/input-file-with-changes.json', + shouldOmitNodeModuleData: true, + }); + console.log('result', result); +}; +``` + +#### Usage: CLI + +```bash +node-modules-compare -- \ + --inputFile '/path/to/input/input-file.json' \ + --inputFileWithChanges '/path/to/input/input-file-with-changes.json' \ + --outputDirectory '/path/to/output' +``` + +#### Usage: Options + +Either `input` or `inputFile` must be provided. + +**Option interfaces** + +The interfaces below are used in various options. + +```typescript +interface NodeModulesCompareInputPayload { + bundleName: string; + files: Record; +} +``` + +**`options.input`** + +*Only available in Node module* -## Running CLI with `ts-node` +The input payload (if not using `inputFile`). + +```typescript +type input = NodeModulesCompareInputPayload[] | undefined; +``` + +**`options.inputFile`** + +The input file path relative to current working directory (if not using `input` param) + +```typescript +type inputFile = string | undefined; +``` + +**`options.inputFileWithChanges`** + +The input file with changes path relative to current working directory (if not using `inputWithChanges` param) + +```typescript +type inputFileWithChanges = string | undefined; +``` + +**`options.inputWithChanges`** + +*Only available in Node module* + +The input with changes payload (if not using `inputFileWithChanges`) + +```typescript +type inputWithChanges = NodeModulesCompareInputPayload[] | undefined; +``` + +**`options.outputDirectory`** + +The output directory path relative to current working directory. If `undefined`, file will not be output. + +```typescript +type outputDirectory = string | undefined; +``` + +**`options.shouldOmitNodeModuleData`** + +If `true` node module data will be ommitted from the resulting dataset + +```typescript +type shouldOmitNodeModuleData = boolean | undefined; +``` + +## Development #### Generate Source Map Output +Below is an example of generating a source map output from a Next.js app using [`source-map-explorer`](https://github.com/danvk/source-map-explorer). + ```bash -source-map-explorer ../foo/src/docker/foo-nginx/next-js/.next/static/**/*.js \ +source-map-explorer ./my-nextjs-app/.next/static/**/*.js \ --json output/result.json \ --replace 'webpack://_N_E/' --with '' ``` #### Run with `npm` +The `npm` script runs `ts-node` under the hood. + ```bash npm run node-modules-compare -- \ - --inputFile './output/result.json' \ - --inputFileWithChanges './output/result2.json' \ - --outputDirectory './output' + --inputFile '/path/to/input/input-file.json' \ + --inputFileWithChanges '/path/to/input/input-file-with-changes.json' \ + --outputDirectory '/path/to/output' ``` diff --git a/src/index.ts b/src/index.ts index 07bc2b6..018f1d8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,2 +1,15 @@ -export { nodeModulesCompare as default } from './nodeModulesCompare'; -export type { ModuleCollection, ModuleItem } from './types'; +import { nodeModulesCompare } from './nodeModulesCompare'; + +export type { + NodeModulesCompareInputPayload, + NodeModuleBundleDependent, + NodeModuleBundleDependentCollection, + NodeModuleItem, + NodeModuleCollection, + NodeModuleItemDiff, + NodeModulesDiff, + NodeModulesCompareResult, +} from './types'; + +export { nodeModulesCompare }; +export default nodeModulesCompare; diff --git a/src/lib/getModules.test.ts b/src/lib/getModules.test.ts index 0dbb1d3..f407763 100644 --- a/src/lib/getModules.test.ts +++ b/src/lib/getModules.test.ts @@ -1,7 +1,7 @@ -import { InputPayload } from '../types'; +import { NodeModulesCompareInputPayload } from '../types'; import { getModules } from './getModules'; -const mockResults: InputPayload[] = [ +const mockResults: NodeModulesCompareInputPayload[] = [ { bundleName: 'chunks/abc.123.js', files: { diff --git a/src/lib/getModules.ts b/src/lib/getModules.ts index 9adaf56..c5c71fd 100644 --- a/src/lib/getModules.ts +++ b/src/lib/getModules.ts @@ -1,10 +1,13 @@ -import type { InputPayload, ModuleCollection } from '../types'; +import type { + NodeModulesCompareInputPayload, + ModuleCollection, +} from '../types'; export const getModules = ({ inputResults, onlyNodeModules, }: { - inputResults: InputPayload[]; + inputResults: NodeModulesCompareInputPayload[]; onlyNodeModules?: boolean; }): ModuleCollection => { const result = inputResults.reduce( diff --git a/src/nodeModulesCompare.test.ts b/src/nodeModulesCompare.test.ts index eacd72a..0791a9e 100644 --- a/src/nodeModulesCompare.test.ts +++ b/src/nodeModulesCompare.test.ts @@ -1,7 +1,7 @@ import { nodeModulesCompare } from './nodeModulesCompare'; -import { InputPayload } from './types'; +import { NodeModulesCompareInputPayload } from './types'; -const mockInputBase: InputPayload[] = [ +const mockInputBase: NodeModulesCompareInputPayload[] = [ { bundleName: './dist/chunks/abc.js', files: { @@ -39,7 +39,7 @@ const mockInputBase: InputPayload[] = [ }, ]; -const mockInputBase2: InputPayload[] = [ +const mockInputBase2: NodeModulesCompareInputPayload[] = [ ...mockInputBase, { bundleName: './dist/chunks/def.js', @@ -57,7 +57,7 @@ const mockInputBase2: InputPayload[] = [ }, ]; -const mockInputBase3: InputPayload[] = [ +const mockInputBase3: NodeModulesCompareInputPayload[] = [ ...mockInputBase2, { bundleName: './dist/chunks/def.js', @@ -69,7 +69,7 @@ const mockInputBase3: InputPayload[] = [ }, ]; -const mockInput: InputPayload[] = [ +const mockInput: NodeModulesCompareInputPayload[] = [ ...mockInputBase3, { bundleName: './dist/chunks/hij.js', diff --git a/src/nodeModulesCompare.ts b/src/nodeModulesCompare.ts index a0bc804..6c212fd 100644 --- a/src/nodeModulesCompare.ts +++ b/src/nodeModulesCompare.ts @@ -5,7 +5,7 @@ import { getModules } from './lib/getModules'; import { getNodeModuleCollectionDiff } from './lib/getNodeModuleCollectionDiff'; import { getNodeModules } from './lib/getNodeModules'; import type { - InputPayload, + NodeModulesCompareInputPayload, NodeModuleCollection, NodeModulesCompareResult, } from './types'; @@ -19,7 +19,7 @@ export const nodeModulesCompare = async ({ shouldOmitNodeModuleData, }: { /** The input payload (if not using `inputFile`) */ - input?: InputPayload[]; + input?: NodeModulesCompareInputPayload[]; /** The input file path relative to current working directory (if not using `input` param) */ inputFile?: string; @@ -28,7 +28,7 @@ export const nodeModulesCompare = async ({ inputFileWithChanges?: string; /** The input with changes payload (if not using `inputFileWithChanges`) */ - inputWithChanges?: InputPayload[]; + inputWithChanges?: NodeModulesCompareInputPayload[]; /** The output directory path relative to current working directory. If `undefined`, file will not be output */ outputDirectory?: string; @@ -43,7 +43,7 @@ export const nodeModulesCompare = async ({ const currentWorkingDirectoryPath = process.cwd(); - let inputResults: InputPayload[] | undefined = input; + let inputResults: NodeModulesCompareInputPayload[] | undefined = input; if (!inputResults && inputFile) { const inputFileJsonContent = await getInputFileContent({ inputFile, @@ -67,7 +67,8 @@ export const nodeModulesCompare = async ({ let nodeModulesWithChanges: NodeModuleCollection | undefined; if (inputWithChanges || inputFileWithChanges) { - let inputResultsWithChanges: InputPayload[] | undefined = inputWithChanges; + let inputResultsWithChanges: NodeModulesCompareInputPayload[] | undefined = + inputWithChanges; if (!inputResultsWithChanges && inputFileWithChanges) { const inputFileJsonContentWithChanges = await getInputFileContent({ inputFile: inputFileWithChanges, diff --git a/src/types.ts b/src/types.ts index d384cee..9c76a9b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,10 +1,10 @@ -export interface InputPayload { +export interface NodeModulesCompareInputPayload { bundleName: string; files: Record; } export interface InputFileContent { - results: InputPayload[]; + results: NodeModulesCompareInputPayload[]; } export interface ModuleItem { From 372407bd1891dee445a3ab269f2dba20b3e57c05 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Tue, 4 Jul 2023 23:19:00 -0400 Subject: [PATCH 05/29] chore: scripts entry --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 8454a23..8590896 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "type": "git", "url": "git+https://github.com/foo-software/node-modules-compare.git" }, - "bin": "dist/bin/nodeModulesCompare.js", + "bin": { + "node-modules-compare": "dist/bin/nodeModulesCompare.js" + }, "scripts": { "node-modules-compare": "ts-node-esm --experimental-specifier-resolution=node src/bin/nodeModulesCompare.ts", "build": "tsc", From 5e6b2e396a9ebc6b03146e5ede5b065235361182 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Tue, 4 Jul 2023 23:21:48 -0400 Subject: [PATCH 06/29] docs: update readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 83e27b9..3bce1d7 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ node-modules-compare -- \ Either `input` or `inputFile` must be provided. -**Option interfaces** +**Option Interfaces** The interfaces below are used in various options. @@ -73,7 +73,7 @@ type input = NodeModulesCompareInputPayload[] | undefined; **`options.inputFile`** -The input file path relative to current working directory (if not using `input` param) +The input file path relative to current working directory (if not using `input` param). ```typescript type inputFile = string | undefined; @@ -107,7 +107,7 @@ type outputDirectory = string | undefined; **`options.shouldOmitNodeModuleData`** -If `true` node module data will be ommitted from the resulting dataset +If `true` node module data will be ommitted from the resulting dataset. ```typescript type shouldOmitNodeModuleData = boolean | undefined; From 78a39f460f19eff08bb084332b2bae9369f4127c Mon Sep 17 00:00:00 2001 From: adamhenson Date: Tue, 4 Jul 2023 23:25:27 -0400 Subject: [PATCH 07/29] docs: update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3bce1d7..2b00330 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ const logNodeModulesCompareResult = async () => { #### Usage: CLI ```bash -node-modules-compare -- \ +node-modules-compare \ --inputFile '/path/to/input/input-file.json' \ --inputFileWithChanges '/path/to/input/input-file-with-changes.json' \ --outputDirectory '/path/to/output' From 1ff3882b210dfb52f86569bd0010dfeadfaf28c6 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Tue, 4 Jul 2023 23:41:01 -0400 Subject: [PATCH 08/29] chore: package --- package.json | 4 +++- src/bin/nodeModulesCompare.ts | 21 ++++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 8590896..69d32cf 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,9 @@ "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", "version": "0.0.1", + "type": "module", + "main": "./index.js", + "types": "./index.d.ts", "repository": { "type": "git", "url": "git+https://github.com/foo-software/node-modules-compare.git" @@ -17,7 +20,6 @@ "prepare": "husky install", "test": "jest" }, - "type": "module", "lint-staged": { "**/*.{ts,tsx}": [ "eslint", diff --git a/src/bin/nodeModulesCompare.ts b/src/bin/nodeModulesCompare.ts index d4420d4..bf10466 100644 --- a/src/bin/nodeModulesCompare.ts +++ b/src/bin/nodeModulesCompare.ts @@ -9,6 +9,9 @@ const packageContentParsed = JSON.parse(packageContent); const cli = meow({ importMeta: import.meta, flags: { + help: { + type: 'boolean', + }, inputFile: { isRequired: true, type: 'string', @@ -26,17 +29,18 @@ const cli = meow({ }); const { + help, inputFile, inputFileWithChanges, outputDirectory, shouldOmitNodeModuleData, } = cli.flags; -console.log( - `running ${packageContentParsed.name}@${packageContentParsed.version} ✨`, -); - const runNodeModulesCompare = async () => { + console.log( + `running ${packageContentParsed.name}@${packageContentParsed.version} ✨`, + ); + const result = await nodeModulesCompare({ inputFile, inputFileWithChanges, @@ -71,4 +75,11 @@ const runNodeModulesCompare = async () => { } }; -runNodeModulesCompare(); +if (help) { + console.log( + `Please refer to GitHub for options: ` + + ` https://github.com/foo-software/node-modules-compare/tree/main#usage-options`, + ); +} else { + runNodeModulesCompare(); +} From 74dc19de116c267c442c577a1607f9f89eec6337 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Tue, 4 Jul 2023 23:42:10 -0400 Subject: [PATCH 09/29] 0.0.2 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4ec9615..19d9f3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@foo-software/node-modules-compare", - "version": "0.0.1", + "version": "0.0.2", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/package.json b/package.json index 69d32cf..bbd98e4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", - "version": "0.0.1", + "version": "0.0.2", "type": "module", "main": "./index.js", "types": "./index.d.ts", From 7084dbc08afb683f8a168b401c365c811de20967 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Tue, 4 Jul 2023 23:55:36 -0400 Subject: [PATCH 10/29] chore: package --- src/bin/nodeModulesCompare.ts | 2 +- src/lib/getPackage.ts | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/bin/nodeModulesCompare.ts b/src/bin/nodeModulesCompare.ts index bf10466..cc64a67 100644 --- a/src/bin/nodeModulesCompare.ts +++ b/src/bin/nodeModulesCompare.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node import meow from 'meow'; -import getPackage from '../lib/getPackage'; +import { getPackage } from '../lib/getPackage'; import { nodeModulesCompare } from '../nodeModulesCompare'; const packageContent = await getPackage(); diff --git a/src/lib/getPackage.ts b/src/lib/getPackage.ts index 37c6aa4..0f60f91 100644 --- a/src/lib/getPackage.ts +++ b/src/lib/getPackage.ts @@ -1,11 +1,9 @@ import fs from 'node:fs/promises'; import { fileURLToPath } from 'node:url'; -const getPackage = (): Promise => { +export const getPackage = (): Promise => { const filePath = fileURLToPath( new URL('../../package.json', import.meta.url), ); return fs.readFile(filePath, 'utf8'); }; - -export default getPackage; From ce1d438aefd4cd768a875ba17c32229575468930 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Tue, 4 Jul 2023 23:55:51 -0400 Subject: [PATCH 11/29] 0.0.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19d9f3c..320a89f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@foo-software/node-modules-compare", - "version": "0.0.2", + "version": "0.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@foo-software/node-modules-compare", - "version": "0.0.1", + "version": "0.0.3", "dependencies": { "meow": "^11.0.0" }, diff --git a/package.json b/package.json index bbd98e4..574652b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", - "version": "0.0.2", + "version": "0.0.3", "type": "module", "main": "./index.js", "types": "./index.d.ts", From d34a4fca53c44a3a71ba61c084f18dd343e254c4 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 00:01:43 -0400 Subject: [PATCH 12/29] chore: package --- src/bin/nodeModulesCompare.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/bin/nodeModulesCompare.ts b/src/bin/nodeModulesCompare.ts index cc64a67..ce628a7 100644 --- a/src/bin/nodeModulesCompare.ts +++ b/src/bin/nodeModulesCompare.ts @@ -1,10 +1,10 @@ #!/usr/bin/env node import meow from 'meow'; -import { getPackage } from '../lib/getPackage'; +// import { getPackage } from '../lib/getPackage'; import { nodeModulesCompare } from '../nodeModulesCompare'; -const packageContent = await getPackage(); -const packageContentParsed = JSON.parse(packageContent); +// const packageContent = await getPackage(); +// const packageContentParsed = JSON.parse(packageContent); const cli = meow({ importMeta: import.meta, @@ -37,9 +37,9 @@ const { } = cli.flags; const runNodeModulesCompare = async () => { - console.log( - `running ${packageContentParsed.name}@${packageContentParsed.version} ✨`, - ); + // console.log( + // `running ${packageContentParsed.name}@${packageContentParsed.version} ✨`, + // ); const result = await nodeModulesCompare({ inputFile, From 2722300503b6cbecf4579158b7ad5cb1c9fd596d Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 00:01:57 -0400 Subject: [PATCH 13/29] 0.0.4 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 320a89f..f336f14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@foo-software/node-modules-compare", - "version": "0.0.3", + "version": "0.0.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@foo-software/node-modules-compare", - "version": "0.0.3", + "version": "0.0.4", "dependencies": { "meow": "^11.0.0" }, diff --git a/package.json b/package.json index 574652b..2b96591 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", - "version": "0.0.3", + "version": "0.0.4", "type": "module", "main": "./index.js", "types": "./index.d.ts", From 519e253d3509468a5bf6ca93c889548f203973e6 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 00:04:38 -0400 Subject: [PATCH 14/29] chore: package --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 2b96591..6fc1c4d 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "node-modules-compare": "ts-node-esm --experimental-specifier-resolution=node src/bin/nodeModulesCompare.ts", "build": "tsc", "lint": "eslint", + "prepublish": "npm run build", "prettier": "prettier --write '**/*.{ts,tsx}'", "prepare": "husky install", "test": "jest" From 38a2a53a6507aabfd0380b567a12e492656bee90 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 00:04:45 -0400 Subject: [PATCH 15/29] 0.0.5 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f336f14..92572c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@foo-software/node-modules-compare", - "version": "0.0.4", + "version": "0.0.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@foo-software/node-modules-compare", - "version": "0.0.4", + "version": "0.0.5", "dependencies": { "meow": "^11.0.0" }, diff --git a/package.json b/package.json index 6fc1c4d..8ab78f6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", - "version": "0.0.4", + "version": "0.0.5", "type": "module", "main": "./index.js", "types": "./index.d.ts", From 8cf40a1fc1238918f9da7c1e13f73b1b0edea9fd Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 00:09:06 -0400 Subject: [PATCH 16/29] chore: package --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8ab78f6..21b1a9b 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "node-modules-compare": "ts-node-esm --experimental-specifier-resolution=node src/bin/nodeModulesCompare.ts", "build": "tsc", "lint": "eslint", - "prepublish": "npm run build", + "prepublishOnly": "npm run build", "prettier": "prettier --write '**/*.{ts,tsx}'", "prepare": "husky install", "test": "jest" From 153df2b94735f1d5f1bf6416534e893e3dd7df94 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 00:09:10 -0400 Subject: [PATCH 17/29] 0.0.6 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 92572c3..bf1b942 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@foo-software/node-modules-compare", - "version": "0.0.5", + "version": "0.0.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@foo-software/node-modules-compare", - "version": "0.0.5", + "version": "0.0.6", "dependencies": { "meow": "^11.0.0" }, diff --git a/package.json b/package.json index 21b1a9b..2322f58 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", - "version": "0.0.5", + "version": "0.0.6", "type": "module", "main": "./index.js", "types": "./index.d.ts", From a792983028896c1004399005d98efb8f0cdaf39e Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 00:18:15 -0400 Subject: [PATCH 18/29] chore: esm --- src/bin/nodeModulesCompare.ts | 14 +++++++------- src/index.ts | 2 +- src/lib/createJsonFile.ts | 2 +- src/lib/getNodeModules.ts | 2 +- src/nodeModulesCompare.ts | 10 +++++----- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/bin/nodeModulesCompare.ts b/src/bin/nodeModulesCompare.ts index ce628a7..f3ab977 100644 --- a/src/bin/nodeModulesCompare.ts +++ b/src/bin/nodeModulesCompare.ts @@ -1,10 +1,10 @@ #!/usr/bin/env node import meow from 'meow'; -// import { getPackage } from '../lib/getPackage'; -import { nodeModulesCompare } from '../nodeModulesCompare'; +import { getPackage } from '../lib/getPackage.js'; +import { nodeModulesCompare } from '../nodeModulesCompare.js'; -// const packageContent = await getPackage(); -// const packageContentParsed = JSON.parse(packageContent); +const packageContent = await getPackage(); +const packageContentParsed = JSON.parse(packageContent); const cli = meow({ importMeta: import.meta, @@ -37,9 +37,9 @@ const { } = cli.flags; const runNodeModulesCompare = async () => { - // console.log( - // `running ${packageContentParsed.name}@${packageContentParsed.version} ✨`, - // ); + console.log( + `running ${packageContentParsed.name}@${packageContentParsed.version} ✨`, + ); const result = await nodeModulesCompare({ inputFile, diff --git a/src/index.ts b/src/index.ts index 018f1d8..4cb796a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import { nodeModulesCompare } from './nodeModulesCompare'; +import { nodeModulesCompare } from './nodeModulesCompare.js'; export type { NodeModulesCompareInputPayload, diff --git a/src/lib/createJsonFile.ts b/src/lib/createJsonFile.ts index 23373ec..07893b6 100644 --- a/src/lib/createJsonFile.ts +++ b/src/lib/createJsonFile.ts @@ -1,5 +1,5 @@ import fs from 'fs'; -import { createDirectory } from './createDirectory'; +import { createDirectory } from './createDirectory.js'; export const createJsonFile = ({ content, diff --git a/src/lib/getNodeModules.ts b/src/lib/getNodeModules.ts index a410927..d8c5b9a 100644 --- a/src/lib/getNodeModules.ts +++ b/src/lib/getNodeModules.ts @@ -3,7 +3,7 @@ import type { NodeModuleCollection, ModuleCollection, } from '../types'; -import { getNodeModulePackageName } from './getNodeModulePackageName'; +import { getNodeModulePackageName } from './getNodeModulePackageName.js'; const getBundleDependents = ({ bundles, diff --git a/src/nodeModulesCompare.ts b/src/nodeModulesCompare.ts index 6c212fd..4c33298 100644 --- a/src/nodeModulesCompare.ts +++ b/src/nodeModulesCompare.ts @@ -1,9 +1,9 @@ import path from 'path'; -import { createJsonFile } from './lib/createJsonFile'; -import { getInputFileContent } from './lib/getInputFileContent'; -import { getModules } from './lib/getModules'; -import { getNodeModuleCollectionDiff } from './lib/getNodeModuleCollectionDiff'; -import { getNodeModules } from './lib/getNodeModules'; +import { createJsonFile } from './lib/createJsonFile.js'; +import { getInputFileContent } from './lib/getInputFileContent.js'; +import { getModules } from './lib/getModules.js'; +import { getNodeModuleCollectionDiff } from './lib/getNodeModuleCollectionDiff.js'; +import { getNodeModules } from './lib/getNodeModules.js'; import type { NodeModulesCompareInputPayload, NodeModuleCollection, From 1f01823ac109782c06d9a23dc8a4e64f80ca735c Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 00:18:34 -0400 Subject: [PATCH 19/29] 0.0.7 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index bf1b942..084defd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@foo-software/node-modules-compare", - "version": "0.0.6", + "version": "0.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@foo-software/node-modules-compare", - "version": "0.0.6", + "version": "0.0.7", "dependencies": { "meow": "^11.0.0" }, diff --git a/package.json b/package.json index 2322f58..af721f8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", - "version": "0.0.6", + "version": "0.0.7", "type": "module", "main": "./index.js", "types": "./index.d.ts", From 175e93208cba2182ca68ae20cf882f0b83b353b8 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 00:26:02 -0400 Subject: [PATCH 20/29] chore: esm --- src/bin/nodeModulesCompare.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/bin/nodeModulesCompare.ts b/src/bin/nodeModulesCompare.ts index f3ab977..92a8eec 100644 --- a/src/bin/nodeModulesCompare.ts +++ b/src/bin/nodeModulesCompare.ts @@ -9,11 +9,10 @@ const packageContentParsed = JSON.parse(packageContent); const cli = meow({ importMeta: import.meta, flags: { - help: { + h: { type: 'boolean', }, inputFile: { - isRequired: true, type: 'string', }, inputFileWithChanges: { @@ -29,7 +28,7 @@ const cli = meow({ }); const { - help, + h, inputFile, inputFileWithChanges, outputDirectory, @@ -75,9 +74,9 @@ const runNodeModulesCompare = async () => { } }; -if (help) { +if (h) { console.log( - `Please refer to GitHub for options: ` + + `Please refer to GitHub for options:\n` + ` https://github.com/foo-software/node-modules-compare/tree/main#usage-options`, ); } else { From f6db7ee1066343527f3e6eb2b98cab7f300149f5 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 00:26:11 -0400 Subject: [PATCH 21/29] 0.0.8 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 084defd..8595f0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@foo-software/node-modules-compare", - "version": "0.0.7", + "version": "0.0.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@foo-software/node-modules-compare", - "version": "0.0.7", + "version": "0.0.8", "dependencies": { "meow": "^11.0.0" }, diff --git a/package.json b/package.json index af721f8..b452085 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", - "version": "0.0.7", + "version": "0.0.8", "type": "module", "main": "./index.js", "types": "./index.d.ts", From 0a4bbd7d3e4aad958dd9bdd1dbdcbdb682e1e30e Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 01:02:06 -0400 Subject: [PATCH 22/29] chore: fix package --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b452085..b8c91a1 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "description": "A tool to compare imported `node_modules` existence and size from one build to another", "version": "0.0.8", "type": "module", - "main": "./index.js", - "types": "./index.d.ts", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", "repository": { "type": "git", "url": "git+https://github.com/foo-software/node-modules-compare.git" From 5356c7ef2388e0d93a01bfdbff7634553f5490a6 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 01:02:16 -0400 Subject: [PATCH 23/29] 0.0.9 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8595f0c..0492471 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@foo-software/node-modules-compare", - "version": "0.0.8", + "version": "0.0.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@foo-software/node-modules-compare", - "version": "0.0.8", + "version": "0.0.9", "dependencies": { "meow": "^11.0.0" }, diff --git a/package.json b/package.json index b8c91a1..10643d8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", - "version": "0.0.8", + "version": "0.0.9", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", From 6a834b45bc3aca30548fb6b7e9afb24024e85b07 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 01:09:26 -0400 Subject: [PATCH 24/29] docs: readme --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 2b00330..15b1c9f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # `@foo-software/node-modules-compare` -**DISCLAIMER:** This project is in its early phases and not ready for use. - A tool to compare imported `node_modules` existence and size from one build to another. ## Prerequisites From 127366c9e42acfce1923c52cc254f3973849731b Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 01:09:39 -0400 Subject: [PATCH 25/29] 0.0.10 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0492471..917201e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@foo-software/node-modules-compare", - "version": "0.0.9", + "version": "0.0.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@foo-software/node-modules-compare", - "version": "0.0.9", + "version": "0.0.10", "dependencies": { "meow": "^11.0.0" }, diff --git a/package.json b/package.json index 10643d8..5af76fb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", - "version": "0.0.9", + "version": "0.0.10", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", From 0f9b2acbfbfdb3f1d06a9329b46bc4c7e0cb0fef Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 01:09:50 -0400 Subject: [PATCH 26/29] 0.1.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 917201e..9ec5599 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@foo-software/node-modules-compare", - "version": "0.0.10", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@foo-software/node-modules-compare", - "version": "0.0.10", + "version": "0.1.0", "dependencies": { "meow": "^11.0.0" }, diff --git a/package.json b/package.json index 5af76fb..9271b32 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", - "version": "0.0.10", + "version": "0.1.0", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", From df3aafe621099f749712acdefb68cec7c017b925 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 19:40:34 -0400 Subject: [PATCH 27/29] docs: readme --- README.md | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 15b1c9f..fab382f 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,9 @@ node-modules-compare \ --outputDirectory '/path/to/output' ``` -#### Usage: Options +## API + +#### API: Options Either `input` or `inputFile` must be provided. @@ -111,6 +113,91 @@ If `true` node module data will be ommitted from the resulting dataset. type shouldOmitNodeModuleData = boolean | undefined; ``` +#### API: Response + +**Response Interfaces** + +The interfaces below are used in the response interface. + +```typescript +export interface NodeModuleBundleDependent { + /** Bundle file or id that depends on the Node module being analyzed */ + bundle: string; + + /** The file paths or ids being used from the Node module being analyzed */ + files: string[]; +} + +export type NodeModuleBundleDependentCollection = Record< + string, + NodeModuleBundleDependent +>; + +export interface NodeModuleItem { + /** Bundles that depend on the Node module being analyzed */ + bundleDependents: NodeModuleBundleDependentCollection; + + /** The file paths or ids being used from the Node module being analyzed */ + files: string[]; + + /** The package name of the Node module being analyzed */ + packageName: string; + + /** The total size in bytes of all files being used from the Node module being analyzed */ + size: number; +} + +export type NodeModuleCollection = Record; + +export interface NodeModuleItemDiff { + /** The bundle dependents count difference between original and changed */ + bundleDependentCount: number; + + /** The number of files used from the module difference between original and changed */ + fileCount: number; + + /** The package name of the Node module being analyzed */ + packageName: string; + + /** The size in bytes difference between original and changed */ + size: number; +} + +export interface NodeModulesDiff { + /** An array of data representing modules that were added */ + added: NodeModuleItem[]; + + /** An array of data representing modules that changed */ + changed: NodeModuleItemDiff[]; + + /** An array of data representing modules that were removed */ + removed: NodeModuleItem[]; + + /** The total bytes difference between original and changed */ + totalBytes: number; +} +``` + +The response interface. + +```typescript +export interface NodeModulesCompareResult { + /** The difference between original and changed modules */ + diff?: NodeModulesDiff; + + /** A collection dataset of Node modules and corresponding data */ + nodeModules?: NodeModuleCollection; + + /** A collection dataset of newer modules that may have changed and corresponding data */ + nodeModulesWithChanges?: NodeModuleCollection; + + /** File path the result is written to */ + resultFilePath?: string; +} +``` + +For examples of the API, see the [tests](./src/nodeModulesCompare.test.ts). + ## Development #### Generate Source Map Output From 7c9009be5a7609897a7e081dd7e87f32f7620b3d Mon Sep 17 00:00:00 2001 From: adamhenson Date: Wed, 5 Jul 2023 19:40:43 -0400 Subject: [PATCH 28/29] 0.1.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9ec5599..0710b9d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@foo-software/node-modules-compare", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@foo-software/node-modules-compare", - "version": "0.1.0", + "version": "0.1.1", "dependencies": { "meow": "^11.0.0" }, diff --git a/package.json b/package.json index 9271b32..0729d20 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@foo-software/node-modules-compare", "description": "A tool to compare imported `node_modules` existence and size from one build to another", - "version": "0.1.0", + "version": "0.1.1", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", From a0081ae62ec25f6033cdca908c4162ccfb9b74e5 Mon Sep 17 00:00:00 2001 From: adamhenson Date: Mon, 22 Jun 2026 20:21:07 -0400 Subject: [PATCH 29/29] chore: gitignore .agentmeter.json (contains local API key) --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 37afc83..56c4127 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts +.agentmeter.json