@ldsg/cli 0.3.31 → 0.3.32
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/.rush/temp/package-deps_build.json +27 -27
- package/.rush/temp/shrinkwrap-deps.json +58 -3
- package/.tsbuildinfo +1 -1
- package/CHANGELOG.json +26 -0
- package/CHANGELOG.md +16 -2
- package/README.md +3 -0
- package/dist/__tests__/commands.test.js +104 -104
- package/dist/__tests__/formatter.test.js +66 -63
- package/dist/__tests__/formatter.test.js.map +1 -1
- package/dist/__tests__/json-file-mutator.test.js +48 -45
- package/dist/__tests__/json-file-mutator.test.js.map +1 -1
- package/dist/__tests__/source-resolver.test.js +39 -39
- package/dist/cli.js +89 -89
- package/dist/cli.js.map +1 -1
- package/dist/commands/resource/convert.d.ts +1 -1
- package/dist/commands/resource/convert.js +9 -7
- package/dist/commands/resource/convert.js.map +1 -1
- package/dist/commands/resource/create.d.ts +2 -2
- package/dist/commands/resource/create.js +5 -5
- package/dist/commands/resource/delete.d.ts +2 -2
- package/dist/commands/resource/delete.js.map +1 -1
- package/dist/commands/resource/diff.d.ts +2 -2
- package/dist/commands/resource/diff.js +8 -8
- package/dist/commands/resource/get.d.ts +1 -1
- package/dist/commands/resource/list.d.ts +2 -2
- package/dist/commands/resource/list.js +11 -11
- package/dist/commands/resource/list.js.map +1 -1
- package/dist/commands/resource/tree.d.ts +1 -1
- package/dist/commands/resource/update.d.ts +2 -2
- package/dist/commands/resource/update.js +1 -1
- package/dist/constants.js +2 -2
- package/dist/types/get-extend-app-data-params.d.ts +2 -2
- package/dist/types/resource-record.d.ts +2 -2
- package/dist/utils/formatter.d.ts +1 -1
- package/dist/utils/formatter.js +25 -25
- package/dist/utils/get-extend-app-data-params-using-npm-ldsg-module.d.ts +1 -1
- package/dist/utils/get-extend-app-data-params-using-npm-ldsg-module.js +12 -12
- package/dist/utils/get-extend-app-data-params-using-npm-ldsg-module.js.map +1 -1
- package/dist/utils/get-extend-app-data-params-using-workspace-ldsg-module/index.d.ts +1 -1
- package/dist/utils/get-extend-app-data-params-using-workspace-ldsg-module/index.js +20 -20
- package/dist/utils/get-extend-app-data-params-using-workspace-ldsg-module/index.js.map +1 -1
- package/dist/utils/json-file-mutator.d.ts +2 -2
- package/dist/utils/json-file-mutator.js +4 -4
- package/dist/utils/json-file-mutator.js.map +1 -1
- package/dist/utils/source-resolver.d.ts +1 -1
- package/dist/utils/source-resolver.js +15 -15
- package/dist/utils/source-resolver.js.map +1 -1
- package/jest.config.js +8 -8
- package/package.json +9 -6
- package/src/__tests__/commands.test.ts +116 -116
- package/src/__tests__/formatter.test.ts +68 -65
- package/src/__tests__/json-file-mutator.test.ts +57 -52
- package/src/__tests__/source-resolver.test.ts +43 -43
- package/src/cli.ts +132 -114
- package/src/commands/resource/convert.ts +13 -11
- package/src/commands/resource/create.ts +8 -8
- package/src/commands/resource/delete.ts +6 -4
- package/src/commands/resource/diff.ts +10 -10
- package/src/commands/resource/get.ts +2 -2
- package/src/commands/resource/list.ts +20 -18
- package/src/commands/resource/tree.ts +2 -2
- package/src/commands/resource/update.ts +4 -4
- package/src/constants.ts +2 -2
- package/src/types/get-extend-app-data-params.ts +5 -3
- package/src/types/resource-record.ts +2 -2
- package/src/utils/formatter.ts +27 -27
- package/src/utils/get-extend-app-data-params-using-npm-ldsg-module.ts +20 -16
- package/src/utils/get-extend-app-data-params-using-workspace-ldsg-module/index.ts +28 -26
- package/src/utils/json-file-mutator.ts +18 -12
- package/src/utils/source-resolver.ts +26 -21
|
@@ -5,96 +5,99 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
7
7
|
const json_file_mutator_1 = require("../utils/json-file-mutator");
|
|
8
|
-
jest.mock(
|
|
8
|
+
jest.mock("fs-extra");
|
|
9
9
|
const mockedFs = fs_extra_1.default;
|
|
10
|
-
describe(
|
|
10
|
+
describe("json-file-mutator", () => {
|
|
11
11
|
const arrayRecords = [
|
|
12
|
-
{ id:
|
|
13
|
-
{ id:
|
|
14
|
-
{ id:
|
|
15
|
-
{ id:
|
|
12
|
+
{ id: "1", kind: "application", parentId: null, settings: { title: "App1" } },
|
|
13
|
+
{ id: "2", kind: "form", parentId: "1", settings: { title: "Form1" } },
|
|
14
|
+
{ id: "3", kind: "table", parentId: "1", settings: { title: "Table1" } },
|
|
15
|
+
{ id: "4", kind: "field", parentId: "3", settings: { title: "Field1" } },
|
|
16
16
|
];
|
|
17
17
|
const arraySourceData = {
|
|
18
18
|
resourceRecords: arrayRecords,
|
|
19
|
-
format:
|
|
20
|
-
filePath:
|
|
19
|
+
format: "array",
|
|
20
|
+
filePath: "/test/data.json",
|
|
21
21
|
};
|
|
22
22
|
const objectSourceData = {
|
|
23
23
|
resourceRecords: arrayRecords,
|
|
24
|
-
format:
|
|
25
|
-
filePath:
|
|
24
|
+
format: "object",
|
|
25
|
+
filePath: "/test/data.json",
|
|
26
26
|
};
|
|
27
27
|
beforeEach(() => {
|
|
28
28
|
jest.resetAllMocks();
|
|
29
29
|
mockedFs.readJson.mockResolvedValue([...arrayRecords]);
|
|
30
30
|
});
|
|
31
|
-
describe(
|
|
32
|
-
it(
|
|
31
|
+
describe("generateId", () => {
|
|
32
|
+
it("should generate a string id", () => {
|
|
33
33
|
const id = (0, json_file_mutator_1.generateId)();
|
|
34
|
-
expect(typeof id).toBe(
|
|
34
|
+
expect(typeof id).toBe("string");
|
|
35
35
|
expect(id.length).toBeGreaterThan(5);
|
|
36
36
|
});
|
|
37
|
-
it(
|
|
37
|
+
it("should generate unique ids", () => {
|
|
38
38
|
const ids = new Set(Array.from({ length: 10 }, () => (0, json_file_mutator_1.generateId)()));
|
|
39
39
|
expect(ids.size).toBe(10);
|
|
40
40
|
});
|
|
41
41
|
});
|
|
42
|
-
describe(
|
|
43
|
-
it(
|
|
42
|
+
describe("appendRecord", () => {
|
|
43
|
+
it("should append a new record to array format", async () => {
|
|
44
44
|
mockedFs.readJson.mockResolvedValue([...arrayRecords]);
|
|
45
|
-
const newRecord = { id:
|
|
45
|
+
const newRecord = { id: "5", kind: "form", parentId: "1", settings: { title: "Form2" } };
|
|
46
46
|
const result = await (0, json_file_mutator_1.appendRecord)(arraySourceData, newRecord);
|
|
47
|
-
expect(result.record.id).toBe(
|
|
47
|
+
expect(result.record.id).toBe("5");
|
|
48
48
|
expect(result.allRecords).toHaveLength(5);
|
|
49
|
-
expect(mockedFs.writeJson).toHaveBeenCalledWith(
|
|
49
|
+
expect(mockedFs.writeJson).toHaveBeenCalledWith("/test/data.json", expect.arrayContaining([expect.objectContaining({ id: "5" })]), { spaces: 2 });
|
|
50
50
|
});
|
|
51
|
-
it(
|
|
51
|
+
it("should append to object format preserving structure", async () => {
|
|
52
52
|
mockedFs.readJson.mockResolvedValue({ resourceRecords: [...arrayRecords] });
|
|
53
|
-
const newRecord = { id:
|
|
53
|
+
const newRecord = { id: "5", kind: "form", parentId: "1", settings: {} };
|
|
54
54
|
await (0, json_file_mutator_1.appendRecord)(objectSourceData, newRecord);
|
|
55
|
-
expect(mockedFs.writeJson).toHaveBeenCalledWith(
|
|
56
|
-
resourceRecords: expect.arrayContaining([expect.objectContaining({ id:
|
|
55
|
+
expect(mockedFs.writeJson).toHaveBeenCalledWith("/test/data.json", expect.objectContaining({
|
|
56
|
+
resourceRecords: expect.arrayContaining([expect.objectContaining({ id: "5" })]),
|
|
57
57
|
}), { spaces: 2 });
|
|
58
58
|
});
|
|
59
|
-
it(
|
|
60
|
-
const dupRecord = { id:
|
|
61
|
-
await expect((0, json_file_mutator_1.appendRecord)(arraySourceData, dupRecord)).rejects.toThrow(
|
|
59
|
+
it("should throw on duplicate id", async () => {
|
|
60
|
+
const dupRecord = { id: "1", kind: "application", parentId: null, settings: {} };
|
|
61
|
+
await expect((0, json_file_mutator_1.appendRecord)(arraySourceData, dupRecord)).rejects.toThrow("already exists");
|
|
62
62
|
});
|
|
63
|
-
it(
|
|
64
|
-
const newRecord = { id:
|
|
63
|
+
it("should not write file in dry-run mode", async () => {
|
|
64
|
+
const newRecord = { id: "5", kind: "form", parentId: "1", settings: {} };
|
|
65
65
|
await (0, json_file_mutator_1.appendRecord)(arraySourceData, newRecord, true);
|
|
66
66
|
expect(mockedFs.writeJson).not.toHaveBeenCalled();
|
|
67
67
|
});
|
|
68
68
|
});
|
|
69
|
-
describe(
|
|
70
|
-
it(
|
|
69
|
+
describe("updateRecord", () => {
|
|
70
|
+
it("should update settings and merge", async () => {
|
|
71
71
|
mockedFs.readJson.mockResolvedValue([...arrayRecords]);
|
|
72
|
-
const result = await (0, json_file_mutator_1.updateRecord)(arraySourceData,
|
|
73
|
-
|
|
72
|
+
const result = await (0, json_file_mutator_1.updateRecord)(arraySourceData, "1", {
|
|
73
|
+
title: "Updated App",
|
|
74
|
+
newField: "value",
|
|
75
|
+
});
|
|
76
|
+
expect(result.record.settings).toEqual({ title: "Updated App", newField: "value" });
|
|
74
77
|
expect(mockedFs.writeJson).toHaveBeenCalled();
|
|
75
78
|
});
|
|
76
|
-
it(
|
|
77
|
-
await expect((0, json_file_mutator_1.updateRecord)(arraySourceData,
|
|
79
|
+
it("should throw on non-existent id", async () => {
|
|
80
|
+
await expect((0, json_file_mutator_1.updateRecord)(arraySourceData, "nonexistent", { title: "x" })).rejects.toThrow("not found");
|
|
78
81
|
});
|
|
79
|
-
it(
|
|
80
|
-
await (0, json_file_mutator_1.updateRecord)(arraySourceData,
|
|
82
|
+
it("should not write file in dry-run mode", async () => {
|
|
83
|
+
await (0, json_file_mutator_1.updateRecord)(arraySourceData, "1", { title: "Dry Run" }, true);
|
|
81
84
|
expect(mockedFs.writeJson).not.toHaveBeenCalled();
|
|
82
85
|
});
|
|
83
86
|
});
|
|
84
|
-
describe(
|
|
85
|
-
it(
|
|
87
|
+
describe("removeRecord", () => {
|
|
88
|
+
it("should remove record and its children", async () => {
|
|
86
89
|
mockedFs.readJson.mockResolvedValue([...arrayRecords]);
|
|
87
|
-
const result = await (0, json_file_mutator_1.removeRecord)(arraySourceData,
|
|
90
|
+
const result = await (0, json_file_mutator_1.removeRecord)(arraySourceData, "3");
|
|
88
91
|
expect(result.removed).toHaveLength(2);
|
|
89
|
-
expect(result.removed.map((r) => r.id)).toEqual([
|
|
92
|
+
expect(result.removed.map((r) => r.id)).toEqual(["3", "4"]);
|
|
90
93
|
expect(result.allRecords).toHaveLength(2);
|
|
91
|
-
expect(result.allRecords.map((r) => r.id)).toEqual([
|
|
94
|
+
expect(result.allRecords.map((r) => r.id)).toEqual(["1", "2"]);
|
|
92
95
|
});
|
|
93
|
-
it(
|
|
94
|
-
await expect((0, json_file_mutator_1.removeRecord)(arraySourceData,
|
|
96
|
+
it("should throw on non-existent id", async () => {
|
|
97
|
+
await expect((0, json_file_mutator_1.removeRecord)(arraySourceData, "nonexistent")).rejects.toThrow("not found");
|
|
95
98
|
});
|
|
96
|
-
it(
|
|
97
|
-
const result = await (0, json_file_mutator_1.removeRecord)(arraySourceData,
|
|
99
|
+
it("should not write file in dry-run mode", async () => {
|
|
100
|
+
const result = await (0, json_file_mutator_1.removeRecord)(arraySourceData, "3", true);
|
|
98
101
|
expect(result.removed).toHaveLength(2);
|
|
99
102
|
expect(mockedFs.writeJson).not.toHaveBeenCalled();
|
|
100
103
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-file-mutator.test.js","sourceRoot":"","sources":["../../src/__tests__/json-file-mutator.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"json-file-mutator.test.js","sourceRoot":"","sources":["../../src/__tests__/json-file-mutator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,44 +7,44 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const os_1 = __importDefault(require("os"));
|
|
9
9
|
const source_resolver_1 = require("../utils/source-resolver");
|
|
10
|
-
jest.mock(
|
|
10
|
+
jest.mock("fs-extra");
|
|
11
11
|
const mockedFs = fs_extra_1.default;
|
|
12
|
-
describe(
|
|
12
|
+
describe("source-resolver", () => {
|
|
13
13
|
const tmpDir = os_1.default.tmpdir();
|
|
14
|
-
const testFilePath = path_1.default.join(tmpDir,
|
|
15
|
-
const testDirPath = path_1.default.join(tmpDir,
|
|
16
|
-
const defaultFilePath = path_1.default.join(process.cwd(),
|
|
14
|
+
const testFilePath = path_1.default.join(tmpDir, "test-resources.json");
|
|
15
|
+
const testDirPath = path_1.default.join(tmpDir, "test-resource-dir");
|
|
16
|
+
const defaultFilePath = path_1.default.join(process.cwd(), "resource-records.json");
|
|
17
17
|
const arrayData = [
|
|
18
|
-
{ id:
|
|
19
|
-
{ id:
|
|
18
|
+
{ id: "1", kind: "application", parentId: null, settings: {} },
|
|
19
|
+
{ id: "2", kind: "form", parentId: "1", settings: {} },
|
|
20
20
|
];
|
|
21
21
|
const objectData = {
|
|
22
|
-
resourceRecords: [{ id:
|
|
22
|
+
resourceRecords: [{ id: "1", kind: "application", parentId: null, settings: {} }],
|
|
23
23
|
};
|
|
24
24
|
beforeEach(() => {
|
|
25
25
|
jest.resetAllMocks();
|
|
26
26
|
});
|
|
27
|
-
describe(
|
|
28
|
-
it(
|
|
27
|
+
describe("resolveSource", () => {
|
|
28
|
+
it("should read array format JSON file", async () => {
|
|
29
29
|
mockedFs.pathExists.mockResolvedValue(true);
|
|
30
30
|
mockedFs.readJson.mockResolvedValue(arrayData);
|
|
31
31
|
mockedFs.stat.mockResolvedValue({ isDirectory: () => false });
|
|
32
32
|
const result = await (0, source_resolver_1.resolveSource)(testFilePath);
|
|
33
33
|
expect(result.resourceRecords).toHaveLength(2);
|
|
34
|
-
expect(result.format).toBe(
|
|
34
|
+
expect(result.format).toBe("array");
|
|
35
35
|
expect(result.filePath).toBe(testFilePath);
|
|
36
36
|
});
|
|
37
|
-
it(
|
|
37
|
+
it("should read object format JSON file", async () => {
|
|
38
38
|
mockedFs.pathExists.mockResolvedValue(true);
|
|
39
39
|
mockedFs.readJson.mockResolvedValue(objectData);
|
|
40
40
|
mockedFs.stat.mockResolvedValue({ isDirectory: () => false });
|
|
41
41
|
const result = await (0, source_resolver_1.resolveSource)(testFilePath);
|
|
42
42
|
expect(result.resourceRecords).toHaveLength(1);
|
|
43
|
-
expect(result.format).toBe(
|
|
43
|
+
expect(result.format).toBe("object");
|
|
44
44
|
expect(result.filePath).toBe(testFilePath);
|
|
45
45
|
});
|
|
46
|
-
it(
|
|
47
|
-
const dirFile = path_1.default.join(testDirPath,
|
|
46
|
+
it("should read directory by appending default filename", async () => {
|
|
47
|
+
const dirFile = path_1.default.join(testDirPath, "resource-records.json");
|
|
48
48
|
mockedFs.pathExists.mockResolvedValue(true);
|
|
49
49
|
mockedFs.readJson.mockResolvedValue(arrayData);
|
|
50
50
|
mockedFs.stat.mockResolvedValue({ isDirectory: () => true });
|
|
@@ -52,49 +52,49 @@ describe('source-resolver', () => {
|
|
|
52
52
|
expect(mockedFs.readJson).toHaveBeenCalledWith(dirFile);
|
|
53
53
|
expect(result.resourceRecords).toHaveLength(2);
|
|
54
54
|
});
|
|
55
|
-
it(
|
|
55
|
+
it("should throw on missing default file", async () => {
|
|
56
56
|
mockedFs.pathExists.mockResolvedValue(false);
|
|
57
|
-
await expect((0, source_resolver_1.resolveSource)(undefined)).rejects.toThrow(
|
|
57
|
+
await expect((0, source_resolver_1.resolveSource)(undefined)).rejects.toThrow("Default source file not found");
|
|
58
58
|
});
|
|
59
|
-
it(
|
|
59
|
+
it("should throw on non-existent file", async () => {
|
|
60
60
|
mockedFs.pathExists.mockResolvedValue(false);
|
|
61
|
-
mockedFs.stat.mockRejectedValue(new Error(
|
|
62
|
-
mockedFs.readJson.mockRejectedValue(new Error(
|
|
63
|
-
await expect((0, source_resolver_1.resolveSource)(
|
|
61
|
+
mockedFs.stat.mockRejectedValue(new Error("ENOENT"));
|
|
62
|
+
mockedFs.readJson.mockRejectedValue(new Error("File not found"));
|
|
63
|
+
await expect((0, source_resolver_1.resolveSource)("/nonexistent/file.json")).rejects.toThrow("Source not found");
|
|
64
64
|
});
|
|
65
|
-
it(
|
|
65
|
+
it("should throw on invalid JSON format", async () => {
|
|
66
66
|
mockedFs.pathExists.mockResolvedValue(true);
|
|
67
|
-
mockedFs.readJson.mockResolvedValue(
|
|
67
|
+
mockedFs.readJson.mockResolvedValue("invalid");
|
|
68
68
|
mockedFs.stat.mockResolvedValue({ isDirectory: () => false });
|
|
69
|
-
await expect((0, source_resolver_1.resolveSource)(testFilePath)).rejects.toThrow(
|
|
69
|
+
await expect((0, source_resolver_1.resolveSource)(testFilePath)).rejects.toThrow("Invalid resource records format");
|
|
70
70
|
});
|
|
71
|
-
it(
|
|
71
|
+
it("should throw on valid object without resourceRecords field", async () => {
|
|
72
72
|
mockedFs.pathExists.mockResolvedValue(true);
|
|
73
|
-
mockedFs.readJson.mockResolvedValue({ foo:
|
|
73
|
+
mockedFs.readJson.mockResolvedValue({ foo: "bar" });
|
|
74
74
|
mockedFs.stat.mockResolvedValue({ isDirectory: () => false });
|
|
75
|
-
await expect((0, source_resolver_1.resolveSource)(testFilePath)).rejects.toThrow(
|
|
75
|
+
await expect((0, source_resolver_1.resolveSource)(testFilePath)).rejects.toThrow("Invalid resource records format");
|
|
76
76
|
});
|
|
77
77
|
});
|
|
78
|
-
describe(
|
|
79
|
-
it(
|
|
80
|
-
expect((0, source_resolver_1.isStdinSource)(
|
|
78
|
+
describe("isStdinSource", () => {
|
|
79
|
+
it("should return true for -", () => {
|
|
80
|
+
expect((0, source_resolver_1.isStdinSource)("-")).toBe(true);
|
|
81
81
|
});
|
|
82
|
-
it(
|
|
83
|
-
expect((0, source_resolver_1.isStdinSource)(
|
|
82
|
+
it("should return false for file paths", () => {
|
|
83
|
+
expect((0, source_resolver_1.isStdinSource)("./data.json")).toBe(false);
|
|
84
84
|
});
|
|
85
|
-
it(
|
|
85
|
+
it("should return false for undefined", () => {
|
|
86
86
|
expect((0, source_resolver_1.isStdinSource)(undefined)).toBe(false);
|
|
87
87
|
});
|
|
88
88
|
});
|
|
89
|
-
describe(
|
|
90
|
-
it(
|
|
91
|
-
expect((0, source_resolver_1.getSourceDescription)(undefined)).toBe(
|
|
89
|
+
describe("getSourceDescription", () => {
|
|
90
|
+
it("should return default path for undefined", () => {
|
|
91
|
+
expect((0, source_resolver_1.getSourceDescription)(undefined)).toBe("./resource-records.json");
|
|
92
92
|
});
|
|
93
93
|
it('should return "stdin" for -', () => {
|
|
94
|
-
expect((0, source_resolver_1.getSourceDescription)(
|
|
94
|
+
expect((0, source_resolver_1.getSourceDescription)("-")).toBe("stdin");
|
|
95
95
|
});
|
|
96
|
-
it(
|
|
97
|
-
expect((0, source_resolver_1.getSourceDescription)(
|
|
96
|
+
it("should return the path itself", () => {
|
|
97
|
+
expect((0, source_resolver_1.getSourceDescription)("./data.json")).toBe("./data.json");
|
|
98
98
|
});
|
|
99
99
|
});
|
|
100
100
|
});
|