Skip to content

Commit f0f1ed8

Browse files
authored
feat: add versions package (#132)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced the `@mojis/versions` package, providing utilities for emoji and Unicode version handling. - **Bug Fixes** - Improved accuracy and reliability of emoji and Unicode version extraction, mapping, and validation. - **Refactor** - Migrated version-related logic from internal utilities to the new `@mojis/versions` package for better modularity. - **Documentation** - Added comprehensive documentation and licensing for the new package. - **Tests** - Introduced extensive test coverage for version extraction, conversion, validation, and API utilities. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2 parents db4ed68 + 651f69c commit f0f1ed8

34 files changed

Lines changed: 865 additions & 591 deletions
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"@mojis/internal-utils": minor
3+
"@mojis/adapters": minor
4+
"@mojis/versions": minor
5+
"@mojis/cli": minor
6+
---
7+
8+
feat: add new mojis versions package

packages/adapters/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"@mojis/moji-compare": "catalog:prod",
4141
"@mojis/parsers": "workspace:*",
4242
"@mojis/schemas": "workspace:*",
43+
"@mojis/versions": "workspace:*",
4344
"arktype": "catalog:prod",
4445
"defu": "catalog:prod",
4546
"fs-extra": "catalog:prod"

packages/adapters/src/handlers/source/metadata.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { EmojiGroup, GroupedEmojiMetadata } from "@mojis/schemas/emojis";
2-
import { extractEmojiVersion, extractUnicodeVersion, isBefore } from "@mojis/internal-utils";
2+
import { isBefore } from "@mojis/internal-utils";
33
import { EMOJI_GROUPS_SCHEMA, GROUPED_BY_GROUP_EMOJI_METADATA_SCHEMA, GROUPED_BY_HEXCODE_EMOJI_METADATA_SCHEMA } from "@mojis/schemas/emojis";
4+
import { extractEmojiVersion, extractUnicodeVersion } from "@mojis/versions";
45
import { type } from "arktype";
56
import { createSourceAdapter } from "../../builders/source-builder/builder";
67
import { joinPath } from "../../utils";

packages/cli/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"@mojis/internal-utils": "workspace:*",
3737
"@mojis/moji-compare": "catalog:prod",
3838
"@mojis/schemas": "workspace:*",
39+
"@mojis/versions": "workspace:*",
3940
"arktype": "catalog:prod",
4041
"farver": "catalog:prod",
4142
"fs-extra": "catalog:prod",

packages/cli/src/cmd/emoji-versions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { EmojiSpecRecord } from "@mojis/schemas/emojis";
22
import type { CLIArguments } from "../cli-utils";
3-
import { getAllEmojiVersions, getLatestEmojiVersion } from "@mojis/internal-utils";
3+
import { getAllEmojiVersions, getLatestEmojiVersion } from "@mojis/versions";
44
import { green, red, yellow } from "farver/fast";
55
import { printHelp } from "../cli-utils";
66
import { writeFileSafe } from "../files";

packages/cli/src/cmd/generate.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import type { EmojiSpecRecord } from "@mojis/schemas/emojis";
22
import type { CLIArguments } from "../cli-utils";
33
import { runSourceAdapter, sourceHandlers } from "@mojis/adapters";
4+
import mojiCompare from "@mojis/moji-compare";
45
import {
56
getAllEmojiVersions,
67
getLatestEmojiVersion,
78
mapEmojiVersionToUnicodeVersion,
89
OFFICIAL_SUPPORTED_VERSIONS,
9-
} from "@mojis/internal-utils";
10-
import mojiCompare from "@mojis/moji-compare";
10+
} from "@mojis/versions";
1111
import { green, yellow } from "farver/fast";
1212
import fs from "fs-extra";
1313
import { printHelp } from "../cli-utils";

packages/cli/test/cmd/emoji-versions.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
/* eslint-disable no-console */
22
import fs from "node:fs/promises";
33
import path from "node:path";
4-
import * as internalUtils from "@mojis/internal-utils";
4+
import * as versions from "@mojis/versions";
55
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
66
import { testdir } from "vitest-testdirs";
77
import * as cliUtils from "../../src/cli-utils";
88
import { runEmojiVersions } from "../../src/cmd/emoji-versions";
99
import * as files from "../../src/files";
1010

11-
vi.mock("@mojis/internal-utils", async () => {
12-
const actual = await vi.importActual("@mojis/internal-utils");
11+
vi.mock("@mojis/versions", async () => {
12+
const actual = await vi.importActual("@mojis/versions");
1313
return {
1414
...actual,
1515
getAllEmojiVersions: vi.fn(),
@@ -49,8 +49,8 @@ describe("emoji-versions command", () => {
4949

5050
beforeEach(() => {
5151
vi.resetAllMocks();
52-
vi.mocked(internalUtils.getAllEmojiVersions).mockResolvedValue(mockEmojiVersions);
53-
vi.mocked(internalUtils.getLatestEmojiVersion)
52+
vi.mocked(versions.getAllEmojiVersions).mockResolvedValue(mockEmojiVersions);
53+
vi.mocked(versions.getLatestEmojiVersion)
5454
.mockImplementation((versions, includeDrafts) =>
5555
includeDrafts ? mockLatestVersionWithDrafts : mockLatestVersion);
5656
console.log = vi.fn();
@@ -120,7 +120,7 @@ describe("emoji-versions command", () => {
120120
force: false,
121121
},
122122
});
123-
expect(internalUtils.getLatestEmojiVersion).toHaveBeenCalledWith(mockEmojiVersions, true);
123+
expect(versions.getLatestEmojiVersion).toHaveBeenCalledWith(mockEmojiVersions, true);
124124
expect(console.log).toHaveBeenCalled();
125125
expect(vi.mocked(console.log).mock.calls[0]?.[0]).toContain("15.1");
126126
});
@@ -141,7 +141,7 @@ describe("emoji-versions command", () => {
141141
});
142142

143143
it("should handle case when no versions are found", async () => {
144-
vi.mocked(internalUtils.getLatestEmojiVersion).mockReturnValue(null);
144+
vi.mocked(versions.getLatestEmojiVersion).mockReturnValue(null);
145145
await runEmojiVersions("latest", {
146146
flags: {
147147
_: ["latest"],
@@ -200,7 +200,7 @@ describe("emoji-versions command", () => {
200200
});
201201

202202
it("should handle empty results after filtering", async () => {
203-
vi.mocked(internalUtils.getAllEmojiVersions).mockResolvedValue([
203+
vi.mocked(versions.getAllEmojiVersions).mockResolvedValue([
204204
{
205205
emoji_version: "15.1",
206206
unicode_version: "",

packages/internal-utils/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
".": "./dist/index.js",
2323
"./shortcodes": "./dist/shortcodes.js",
2424
"./constants": "./dist/constants.js",
25-
"./versions": "./dist/versions.js",
2625
"./package.json": "./package.json"
2726
},
2827
"main": "./dist/index.js",
Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,2 @@
1-
export const OFFICIAL_SUPPORTED_VERSIONS = [
2-
"1.0",
3-
"2.0",
4-
"3.0",
5-
"4.0",
6-
"5.0",
7-
"11.0",
8-
"12.0",
9-
"12.1",
10-
"13.0",
11-
"13.1",
12-
"14.0",
13-
"15.0",
14-
"15.1",
15-
"16.0",
16-
];
17-
181
export const FEMALE_SIGN = "2640"; // FEMALE SIGN
192
export const MALE_SIGN = "2642"; // MALE SIGN
20-
21-
/**
22-
* These versions don't exist in the Unicode Consortium's emoji versioning scheme.
23-
* This is because they aligned the emoji version with the Unicode version starting from v11.
24-
*
25-
* So actually, the emoji version v11.0 is v6.0
26-
*/
27-
export const NON_EXISTING_VERSIONS = ["6.x", "7.x", "8.x", "9.x", "10.x"];

packages/internal-utils/src/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ export * from "./hexcode";
66
export * from "./predicates";
77
export * from "./shortcodes";
88
export type * from "./types";
9-
export * from "./versions";
109

1110
interface ArkTypeResultError {
1211
success: false;

0 commit comments

Comments
 (0)