shapedef 1.0.5 → 1.0.6
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/cjs/shape-utils.d.ts.map +1 -1
- package/dist/cjs/shape-utils.js +5 -0
- package/dist/cjs/shape-utils.js.map +1 -1
- package/dist/esm/shape-utils.d.ts.map +1 -1
- package/dist/esm/shape-utils.js +5 -0
- package/dist/esm/shape-utils.js.map +1 -1
- package/package.json +1 -1
- package/src/shape-utils.test.ts +90 -0
- package/src/shape-utils.ts +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape-utils.d.ts","sourceRoot":"","sources":["../../src/shape-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"shape-utils.d.ts","sourceRoot":"","sources":["../../src/shape-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAU,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,YAAY,GAAI,GAAG,KAAK,EAAE,GAAG,KAAK,KAAG,OACT,CAAC;AAE1C,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,KAuC5C,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,KAAG,QAAQ,EA8CnD,CAAC"}
|
package/dist/cjs/shape-utils.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getShapeDeps = exports.simplifyShape = exports.shapeCompare = void 0;
|
|
4
|
+
const shape_1 = require("./shape");
|
|
4
5
|
const shapeCompare = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
5
6
|
exports.shapeCompare = shapeCompare;
|
|
6
7
|
const simplifyShape = (shape) => {
|
|
@@ -42,6 +43,10 @@ const simplifyShape = (shape) => {
|
|
|
42
43
|
exports.simplifyShape = simplifyShape;
|
|
43
44
|
const getShapeDeps = (shape) => {
|
|
44
45
|
const deps = new Map();
|
|
46
|
+
if (shape.anno.foreign?.shapeName) {
|
|
47
|
+
const ref = shape_1.shapes.ref(shape.anno.foreign.shapeName);
|
|
48
|
+
deps.set(ref.name, ref);
|
|
49
|
+
}
|
|
45
50
|
switch (shape.type) {
|
|
46
51
|
case "ref":
|
|
47
52
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape-utils.js","sourceRoot":"","sources":["../../src/shape-utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"shape-utils.js","sourceRoot":"","sources":["../../src/shape-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape-utils.d.ts","sourceRoot":"","sources":["../../src/shape-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"shape-utils.d.ts","sourceRoot":"","sources":["../../src/shape-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAU,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,YAAY,GAAI,GAAG,KAAK,EAAE,GAAG,KAAK,KAAG,OACT,CAAC;AAE1C,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,KAuC5C,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,KAAG,QAAQ,EA8CnD,CAAC"}
|
package/dist/esm/shape-utils.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getShapeDeps = exports.simplifyShape = exports.shapeCompare = void 0;
|
|
4
|
+
const shape_1 = require("./shape");
|
|
4
5
|
const shapeCompare = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
5
6
|
exports.shapeCompare = shapeCompare;
|
|
6
7
|
const simplifyShape = (shape) => {
|
|
@@ -42,6 +43,10 @@ const simplifyShape = (shape) => {
|
|
|
42
43
|
exports.simplifyShape = simplifyShape;
|
|
43
44
|
const getShapeDeps = (shape) => {
|
|
44
45
|
const deps = new Map();
|
|
46
|
+
if (shape.anno.foreign?.shapeName) {
|
|
47
|
+
const ref = shape_1.shapes.ref(shape.anno.foreign.shapeName);
|
|
48
|
+
deps.set(ref.name, ref);
|
|
49
|
+
}
|
|
45
50
|
switch (shape.type) {
|
|
46
51
|
case "ref":
|
|
47
52
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape-utils.js","sourceRoot":"","sources":["../../src/shape-utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"shape-utils.js","sourceRoot":"","sources":["../../src/shape-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { describe, expect } from "vitest";
|
|
2
|
+
import { annotate, shapes } from "./shape";
|
|
3
|
+
import { getShapeDeps } from "./shape-utils";
|
|
4
|
+
|
|
5
|
+
const names = (deps: ReturnType<typeof getShapeDeps>) =>
|
|
6
|
+
deps.map((d) => d.name);
|
|
7
|
+
|
|
8
|
+
describe("getShapeDeps", (it) => {
|
|
9
|
+
it("returns no deps for leaf shapes", () => {
|
|
10
|
+
expect(getShapeDeps(shapes.str())).toEqual([]);
|
|
11
|
+
expect(getShapeDeps(shapes.int())).toEqual([]);
|
|
12
|
+
expect(getShapeDeps(shapes.bool())).toEqual([]);
|
|
13
|
+
expect(getShapeDeps(shapes.nil())).toEqual([]);
|
|
14
|
+
expect(getShapeDeps(shapes.unknown())).toEqual([]);
|
|
15
|
+
expect(getShapeDeps(shapes.literalStr("x"))).toEqual([]);
|
|
16
|
+
expect(getShapeDeps(shapes.literalInt(1))).toEqual([]);
|
|
17
|
+
expect(getShapeDeps(shapes.vector(3))).toEqual([]);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it("returns the ref itself as a dep", () => {
|
|
21
|
+
expect(names(getShapeDeps(shapes.ref("Foo")))).toEqual(["Foo"]);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("includes refs inside a ref hint", () => {
|
|
25
|
+
const shape = shapes.ref("Foo", shapes.mapping({ id: shapes.ref("Bar") }));
|
|
26
|
+
expect(names(getShapeDeps(shape as any))).toEqual(["Foo", "Bar"]);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("recurses into array item", () => {
|
|
30
|
+
expect(names(getShapeDeps(shapes.array(shapes.ref("Foo"))))).toEqual([
|
|
31
|
+
"Foo",
|
|
32
|
+
]);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("recurses into mapping fields", () => {
|
|
36
|
+
const shape = shapes.mapping({
|
|
37
|
+
a: shapes.ref("Foo"),
|
|
38
|
+
b: shapes.ref("Bar"),
|
|
39
|
+
c: shapes.str(),
|
|
40
|
+
});
|
|
41
|
+
expect(names(getShapeDeps(shape))).toEqual(["Foo", "Bar"]);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it("recurses into tuple items", () => {
|
|
45
|
+
const shape = shapes.tuple(
|
|
46
|
+
shapes.ref("Foo"),
|
|
47
|
+
shapes.str(),
|
|
48
|
+
shapes.ref("Bar"),
|
|
49
|
+
);
|
|
50
|
+
expect(names(getShapeDeps(shape))).toEqual(["Foo", "Bar"]);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("recurses into union members", () => {
|
|
54
|
+
const shape = shapes.union(
|
|
55
|
+
shapes.ref("Foo"),
|
|
56
|
+
shapes.str(),
|
|
57
|
+
shapes.ref("Bar"),
|
|
58
|
+
);
|
|
59
|
+
expect(names(getShapeDeps(shape))).toEqual(["Foo", "Bar"]);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it("deduplicates refs with the same name", () => {
|
|
63
|
+
const shape = shapes.mapping({
|
|
64
|
+
a: shapes.ref("Foo"),
|
|
65
|
+
b: shapes.ref("Foo"),
|
|
66
|
+
});
|
|
67
|
+
expect(names(getShapeDeps(shape))).toEqual(["Foo"]);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("collects anno.foreign as a dep", () => {
|
|
71
|
+
const shape = annotate.foreign(shapes.int(), "User", "id");
|
|
72
|
+
expect(names(getShapeDeps(shape))).toEqual(["User"]);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("collects anno.foreign from nested mapping fields", () => {
|
|
76
|
+
const shape = shapes.mapping({
|
|
77
|
+
userId: annotate.foreign(shapes.int(), "User", "id"),
|
|
78
|
+
postId: annotate.foreign(shapes.int(), "Post", "id"),
|
|
79
|
+
});
|
|
80
|
+
expect(names(getShapeDeps(shape))).toEqual(["User", "Post"]);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it("combines ref and anno.foreign deps", () => {
|
|
84
|
+
const shape = shapes.mapping({
|
|
85
|
+
type: shapes.ref("Kind"),
|
|
86
|
+
ownerId: annotate.foreign(shapes.int(), "Owner", "id"),
|
|
87
|
+
});
|
|
88
|
+
expect(names(getShapeDeps(shape))).toEqual(["Kind", "Owner"]);
|
|
89
|
+
});
|
|
90
|
+
});
|
package/src/shape-utils.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TupleOf } from "./common";
|
|
2
|
-
import { Shape, ShapeRef } from "./shape";
|
|
2
|
+
import { Shape, ShapeRef, shapes } from "./shape";
|
|
3
3
|
|
|
4
4
|
export const shapeCompare = (a: Shape, b: Shape): boolean =>
|
|
5
5
|
JSON.stringify(a) === JSON.stringify(b);
|
|
@@ -48,6 +48,11 @@ export const simplifyShape = (shape: Shape): Shape => {
|
|
|
48
48
|
export const getShapeDeps = (shape: Shape): ShapeRef[] => {
|
|
49
49
|
const deps: Map<string, ShapeRef> = new Map();
|
|
50
50
|
|
|
51
|
+
if (shape.anno.foreign?.shapeName) {
|
|
52
|
+
const ref = shapes.ref(shape.anno.foreign.shapeName);
|
|
53
|
+
deps.set(ref.name, ref);
|
|
54
|
+
}
|
|
55
|
+
|
|
51
56
|
switch (shape.type) {
|
|
52
57
|
case "ref":
|
|
53
58
|
{
|