Skip to content

Commit

Permalink
Tweak these names a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmire committed Jul 29, 2022
1 parent 765ef30 commit e096a90
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 63 deletions.
78 changes: 30 additions & 48 deletions src/package-manifest.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ describe('package-manifest', () => {
it('reads a minimal package manifest, expanding it by filling in values for optional fields', async () => {
await withSandbox(async (sandbox) => {
const manifestPath = path.join(sandbox.directoryPath, 'package.json');
const unvalidatedManifest = {
const unvalidated = {
name: 'foo',
version: '1.2.3',
};
const validatedManifest = {
const validated = {
name: 'foo',
version: new SemVer('1.2.3'),
workspaces: [],
Expand All @@ -24,27 +24,24 @@ describe('package-manifest', () => {
optionalDependencies: {},
peerDependencies: {},
};
await fs.promises.writeFile(
manifestPath,
JSON.stringify(unvalidatedManifest),
);
await fs.promises.writeFile(manifestPath, JSON.stringify(unvalidated));

expect(await readPackageManifest(manifestPath)).toStrictEqual({
unvalidatedManifest,
validatedManifest,
unvalidated,
validated,
});
});
});

it('reads a package manifest where "private" is true', async () => {
await withSandbox(async (sandbox) => {
const manifestPath = path.join(sandbox.directoryPath, 'package.json');
const unvalidatedManifest = {
const unvalidated = {
name: 'foo',
version: '1.2.3',
private: true,
};
const validatedManifest = {
const validated = {
name: 'foo',
version: new SemVer('1.2.3'),
workspaces: [],
Expand All @@ -55,27 +52,24 @@ describe('package-manifest', () => {
optionalDependencies: {},
peerDependencies: {},
};
await fs.promises.writeFile(
manifestPath,
JSON.stringify(unvalidatedManifest),
);
await fs.promises.writeFile(manifestPath, JSON.stringify(unvalidated));

expect(await readPackageManifest(manifestPath)).toStrictEqual({
unvalidatedManifest,
validatedManifest,
unvalidated,
validated,
});
});
});

it('reads a package manifest where "private" is false', async () => {
await withSandbox(async (sandbox) => {
const manifestPath = path.join(sandbox.directoryPath, 'package.json');
const unvalidatedManifest = {
const unvalidated = {
name: 'foo',
version: '1.2.3',
private: false,
};
const validatedManifest = {
const validated = {
name: 'foo',
version: new SemVer('1.2.3'),
workspaces: [],
Expand All @@ -86,22 +80,19 @@ describe('package-manifest', () => {
optionalDependencies: {},
peerDependencies: {},
};
await fs.promises.writeFile(
manifestPath,
JSON.stringify(unvalidatedManifest),
);
await fs.promises.writeFile(manifestPath, JSON.stringify(unvalidated));

expect(await readPackageManifest(manifestPath)).toStrictEqual({
unvalidatedManifest,
validatedManifest,
unvalidated,
validated,
});
});
});

it('reads a package manifest where optional fields are fully provided', async () => {
await withSandbox(async (sandbox) => {
const manifestPath = path.join(sandbox.directoryPath, 'package.json');
const unvalidatedManifest = {
const unvalidated = {
name: 'foo',
version: '1.2.3',
workspaces: ['packages/*'],
Expand All @@ -122,7 +113,7 @@ describe('package-manifest', () => {
foo: 'bar',
},
};
const validatedManifest = {
const validated = {
name: 'foo',
version: new SemVer('1.2.3'),
workspaces: ['packages/*'],
Expand All @@ -143,22 +134,19 @@ describe('package-manifest', () => {
foo: 'bar',
},
};
await fs.promises.writeFile(
manifestPath,
JSON.stringify(unvalidatedManifest),
);
await fs.promises.writeFile(manifestPath, JSON.stringify(unvalidated));

expect(await readPackageManifest(manifestPath)).toStrictEqual({
unvalidatedManifest,
validatedManifest,
unvalidated,
validated,
});
});
});

it('reads a package manifest where dependencies fields are provided but empty', async () => {
await withSandbox(async (sandbox) => {
const manifestPath = path.join(sandbox.directoryPath, 'package.json');
const unvalidatedManifest = {
const unvalidated = {
name: 'foo',
version: '1.2.3',
private: true,
Expand All @@ -168,7 +156,7 @@ describe('package-manifest', () => {
optionalDependencies: {},
peerDependencies: {},
};
const validatedManifest = {
const validated = {
name: 'foo',
version: new SemVer('1.2.3'),
workspaces: [],
Expand All @@ -179,27 +167,24 @@ describe('package-manifest', () => {
optionalDependencies: {},
peerDependencies: {},
};
await fs.promises.writeFile(
manifestPath,
JSON.stringify(unvalidatedManifest),
);
await fs.promises.writeFile(manifestPath, JSON.stringify(unvalidated));

expect(await readPackageManifest(manifestPath)).toStrictEqual({
unvalidatedManifest,
validatedManifest,
unvalidated,
validated,
});
});
});

it('reads a package manifest where the "workspaces" field is provided but empty', async () => {
await withSandbox(async (sandbox) => {
const manifestPath = path.join(sandbox.directoryPath, 'package.json');
const unvalidatedManifest = {
const unvalidated = {
name: 'foo',
version: '1.2.3',
workspaces: [],
};
const validatedManifest = {
const validated = {
name: 'foo',
version: new SemVer('1.2.3'),
workspaces: [],
Expand All @@ -210,14 +195,11 @@ describe('package-manifest', () => {
optionalDependencies: {},
peerDependencies: {},
};
await fs.promises.writeFile(
manifestPath,
JSON.stringify(unvalidatedManifest),
);
await fs.promises.writeFile(manifestPath, JSON.stringify(unvalidated));

expect(await readPackageManifest(manifestPath)).toStrictEqual({
unvalidatedManifest,
validatedManifest,
unvalidated,
validated,
});
});
});
Expand Down
23 changes: 12 additions & 11 deletions src/package-manifest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -321,55 +321,56 @@ function readPackageManifestDependenciesFields({
* manifest.
*
* @param manifestPath - The path of the manifest file.
* @returns The correctly typed version of the manifest.
* @returns The correctly typed version of the manifest data along with the
* original manifest data.
* @throws If key data within the manifest is missing (currently `name` and
* `version`).
*/
export async function readPackageManifest(manifestPath: string): Promise<{
unvalidatedManifest: UnvalidatedPackageManifest;
validatedManifest: ValidatedPackageManifest;
unvalidated: UnvalidatedPackageManifest;
validated: ValidatedPackageManifest;
}> {
const unvalidatedManifest = await readJsonObjectFile(manifestPath);
const unvalidated = await readJsonObjectFile(manifestPath);
const parentDirectory = path.dirname(manifestPath);
const name = readPackageManifestField({
manifest: unvalidatedManifest,
manifest: unvalidated,
parentDirectory,
fieldName: PackageManifestFieldNames.Name,
validation: validationForPackageManifestNameField,
});
const version = readPackageManifestField({
manifest: unvalidatedManifest,
manifest: unvalidated,
parentDirectory,
fieldName: PackageManifestFieldNames.Version,
validation: validationForPackageManifestVersionField,
transform: (value: string) => new SemVer(value),
});
const workspaces = readPackageManifestField({
manifest: unvalidatedManifest,
manifest: unvalidated,
parentDirectory,
fieldName: PackageManifestFieldNames.Workspaces,
validation: validationForPackageManifestWorkspacesField,
defaultValue: [],
});
const privateValue = readPackageManifestField({
manifest: unvalidatedManifest,
manifest: unvalidated,
parentDirectory,
fieldName: PackageManifestFieldNames.Private,
validation: validationForPackageManifestPrivateField,
defaultValue: false,
});
const dependenciesFields = readPackageManifestDependenciesFields({
manifest: unvalidatedManifest,
manifest: unvalidated,
parentDirectory,
});

const validatedManifest = {
const validated = {
[PackageManifestFieldNames.Name]: name,
[PackageManifestFieldNames.Version]: version,
[PackageManifestFieldNames.Workspaces]: workspaces,
[PackageManifestFieldNames.Private]: privateValue,
...dependenciesFields,
};

return { unvalidatedManifest, validatedManifest };
return { unvalidated, validated };
}
5 changes: 4 additions & 1 deletion src/package.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ describe('package', () => {
const validatedManifest = buildMockManifest();
jest
.spyOn(packageManifestModule, 'readPackageManifest')
.mockResolvedValue({ unvalidatedManifest, validatedManifest });
.mockResolvedValue({
unvalidated: unvalidatedManifest,
validated: validatedManifest,
});

const pkg = await readPackage(packageDirectoryPath);

Expand Down
5 changes: 2 additions & 3 deletions src/package.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,8 @@ export async function readPackage(
): Promise<Package> {
const manifestPath = path.join(packageDirectoryPath, MANIFEST_FILE_NAME);
const changelogPath = path.join(packageDirectoryPath, CHANGELOG_FILE_NAME);
const { unvalidatedManifest, validatedManifest } = await readPackageManifest(
manifestPath,
);
const { unvalidated: unvalidatedManifest, validated: validatedManifest } =
await readPackageManifest(manifestPath);

return {
directoryPath: packageDirectoryPath,
Expand Down

0 comments on commit e096a90

Please sign in to comment.