@typespec/mutator-framework 0.12.0
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/LICENSE +21 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mutation/index.d.ts +13 -0
- package/dist/src/mutation/index.d.ts.map +1 -0
- package/dist/src/mutation/index.js +13 -0
- package/dist/src/mutation/index.js.map +1 -0
- package/dist/src/mutation/interface.d.ts +11 -0
- package/dist/src/mutation/interface.d.ts.map +1 -0
- package/dist/src/mutation/interface.js +17 -0
- package/dist/src/mutation/interface.js.map +1 -0
- package/dist/src/mutation/intrinsic.d.ts +9 -0
- package/dist/src/mutation/intrinsic.d.ts.map +1 -0
- package/dist/src/mutation/intrinsic.js +11 -0
- package/dist/src/mutation/intrinsic.js.map +1 -0
- package/dist/src/mutation/literal.d.ts +9 -0
- package/dist/src/mutation/literal.d.ts.map +1 -0
- package/dist/src/mutation/literal.js +11 -0
- package/dist/src/mutation/literal.js.map +1 -0
- package/dist/src/mutation/model-property.d.ts +12 -0
- package/dist/src/mutation/model-property.d.ts.map +1 -0
- package/dist/src/mutation/model-property.js +18 -0
- package/dist/src/mutation/model-property.js.map +1 -0
- package/dist/src/mutation/model.d.ts +18 -0
- package/dist/src/mutation/model.d.ts.map +1 -0
- package/dist/src/mutation/model.js +34 -0
- package/dist/src/mutation/model.js.map +1 -0
- package/dist/src/mutation/mutation-engine.d.ts +80 -0
- package/dist/src/mutation/mutation-engine.d.ts.map +1 -0
- package/dist/src/mutation/mutation-engine.js +165 -0
- package/dist/src/mutation/mutation-engine.js.map +1 -0
- package/dist/src/mutation/mutation-engine.test.d.ts +2 -0
- package/dist/src/mutation/mutation-engine.test.d.ts.map +1 -0
- package/dist/src/mutation/mutation-engine.test.js +145 -0
- package/dist/src/mutation/mutation-engine.test.js.map +1 -0
- package/dist/src/mutation/mutation.d.ts +45 -0
- package/dist/src/mutation/mutation.d.ts.map +1 -0
- package/dist/src/mutation/mutation.js +29 -0
- package/dist/src/mutation/mutation.js.map +1 -0
- package/dist/src/mutation/operation.d.ts +13 -0
- package/dist/src/mutation/operation.d.ts.map +1 -0
- package/dist/src/mutation/operation.js +20 -0
- package/dist/src/mutation/operation.js.map +1 -0
- package/dist/src/mutation/scalar.d.ts +11 -0
- package/dist/src/mutation/scalar.d.ts.map +1 -0
- package/dist/src/mutation/scalar.js +17 -0
- package/dist/src/mutation/scalar.js.map +1 -0
- package/dist/src/mutation/simple-mutation-engine.d.ts +8 -0
- package/dist/src/mutation/simple-mutation-engine.d.ts.map +1 -0
- package/dist/src/mutation/simple-mutation-engine.js +11 -0
- package/dist/src/mutation/simple-mutation-engine.js.map +1 -0
- package/dist/src/mutation/union-variant.d.ts +10 -0
- package/dist/src/mutation/union-variant.d.ts.map +1 -0
- package/dist/src/mutation/union-variant.js +12 -0
- package/dist/src/mutation/union-variant.js.map +1 -0
- package/dist/src/mutation/union.d.ts +11 -0
- package/dist/src/mutation/union.d.ts.map +1 -0
- package/dist/src/mutation/union.js +18 -0
- package/dist/src/mutation/union.js.map +1 -0
- package/dist/src/mutation-node/enum-member.d.ts +7 -0
- package/dist/src/mutation-node/enum-member.d.ts.map +1 -0
- package/dist/src/mutation-node/enum-member.js +6 -0
- package/dist/src/mutation-node/enum-member.js.map +1 -0
- package/dist/src/mutation-node/enum-member.test.d.ts +2 -0
- package/dist/src/mutation-node/enum-member.test.d.ts.map +1 -0
- package/dist/src/mutation-node/enum-member.test.js +25 -0
- package/dist/src/mutation-node/enum-member.test.js.map +1 -0
- package/dist/src/mutation-node/enum.d.ts +8 -0
- package/dist/src/mutation-node/enum.d.ts.map +1 -0
- package/dist/src/mutation-node/enum.js +30 -0
- package/dist/src/mutation-node/enum.js.map +1 -0
- package/dist/src/mutation-node/enum.test.d.ts +2 -0
- package/dist/src/mutation-node/enum.test.d.ts.map +1 -0
- package/dist/src/mutation-node/enum.test.js +25 -0
- package/dist/src/mutation-node/enum.test.js.map +1 -0
- package/dist/src/mutation-node/factory.d.ts +17 -0
- package/dist/src/mutation-node/factory.d.ts.map +1 -0
- package/dist/src/mutation-node/factory.js +45 -0
- package/dist/src/mutation-node/factory.js.map +1 -0
- package/dist/src/mutation-node/index.d.ts +15 -0
- package/dist/src/mutation-node/index.d.ts.map +1 -0
- package/dist/src/mutation-node/index.js +16 -0
- package/dist/src/mutation-node/index.js.map +1 -0
- package/dist/src/mutation-node/interface.d.ts +8 -0
- package/dist/src/mutation-node/interface.d.ts.map +1 -0
- package/dist/src/mutation-node/interface.js +30 -0
- package/dist/src/mutation-node/interface.js.map +1 -0
- package/dist/src/mutation-node/intrinsic.d.ts +7 -0
- package/dist/src/mutation-node/intrinsic.d.ts.map +1 -0
- package/dist/src/mutation-node/intrinsic.js +6 -0
- package/dist/src/mutation-node/intrinsic.js.map +1 -0
- package/dist/src/mutation-node/literal.d.ts +7 -0
- package/dist/src/mutation-node/literal.d.ts.map +1 -0
- package/dist/src/mutation-node/literal.js +6 -0
- package/dist/src/mutation-node/literal.js.map +1 -0
- package/dist/src/mutation-node/model-property.d.ts +10 -0
- package/dist/src/mutation-node/model-property.d.ts.map +1 -0
- package/dist/src/mutation-node/model-property.js +48 -0
- package/dist/src/mutation-node/model-property.js.map +1 -0
- package/dist/src/mutation-node/model-property.test.d.ts +2 -0
- package/dist/src/mutation-node/model-property.test.d.ts.map +1 -0
- package/dist/src/mutation-node/model-property.test.js +108 -0
- package/dist/src/mutation-node/model-property.test.js.map +1 -0
- package/dist/src/mutation-node/model.d.ts +10 -0
- package/dist/src/mutation-node/model.d.ts.map +1 -0
- package/dist/src/mutation-node/model.js +82 -0
- package/dist/src/mutation-node/model.js.map +1 -0
- package/dist/src/mutation-node/model.test.d.ts +2 -0
- package/dist/src/mutation-node/model.test.d.ts.map +1 -0
- package/dist/src/mutation-node/model.test.js +133 -0
- package/dist/src/mutation-node/model.test.js.map +1 -0
- package/dist/src/mutation-node/mutation-edge.d.ts +18 -0
- package/dist/src/mutation-node/mutation-edge.d.ts.map +1 -0
- package/dist/src/mutation-node/mutation-edge.js +31 -0
- package/dist/src/mutation-node/mutation-edge.js.map +1 -0
- package/dist/src/mutation-node/mutation-node.d.ts +29 -0
- package/dist/src/mutation-node/mutation-node.d.ts.map +1 -0
- package/dist/src/mutation-node/mutation-node.js +82 -0
- package/dist/src/mutation-node/mutation-node.js.map +1 -0
- package/dist/src/mutation-node/mutation-node.test.d.ts +2 -0
- package/dist/src/mutation-node/mutation-node.test.d.ts.map +1 -0
- package/dist/src/mutation-node/mutation-node.test.js +88 -0
- package/dist/src/mutation-node/mutation-node.test.js.map +1 -0
- package/dist/src/mutation-node/mutation-subgraph.d.ts +17 -0
- package/dist/src/mutation-node/mutation-subgraph.d.ts.map +1 -0
- package/dist/src/mutation-node/mutation-subgraph.js +45 -0
- package/dist/src/mutation-node/mutation-subgraph.js.map +1 -0
- package/dist/src/mutation-node/operation.d.ts +9 -0
- package/dist/src/mutation-node/operation.d.ts.map +1 -0
- package/dist/src/mutation-node/operation.js +44 -0
- package/dist/src/mutation-node/operation.js.map +1 -0
- package/dist/src/mutation-node/scalar.d.ts +8 -0
- package/dist/src/mutation-node/scalar.d.ts.map +1 -0
- package/dist/src/mutation-node/scalar.js +28 -0
- package/dist/src/mutation-node/scalar.js.map +1 -0
- package/dist/src/mutation-node/scalar.test.d.ts +2 -0
- package/dist/src/mutation-node/scalar.test.d.ts.map +1 -0
- package/dist/src/mutation-node/scalar.test.js +40 -0
- package/dist/src/mutation-node/scalar.test.js.map +1 -0
- package/dist/src/mutation-node/tuple.d.ts +9 -0
- package/dist/src/mutation-node/tuple.d.ts.map +1 -0
- package/dist/src/mutation-node/tuple.js +32 -0
- package/dist/src/mutation-node/tuple.js.map +1 -0
- package/dist/src/mutation-node/tuple.test.d.ts +2 -0
- package/dist/src/mutation-node/tuple.test.d.ts.map +1 -0
- package/dist/src/mutation-node/tuple.test.js +29 -0
- package/dist/src/mutation-node/tuple.test.js.map +1 -0
- package/dist/src/mutation-node/union-variant.d.ts +8 -0
- package/dist/src/mutation-node/union-variant.d.ts.map +1 -0
- package/dist/src/mutation-node/union-variant.js +23 -0
- package/dist/src/mutation-node/union-variant.js.map +1 -0
- package/dist/src/mutation-node/union-variant.test.d.ts +2 -0
- package/dist/src/mutation-node/union-variant.test.d.ts.map +1 -0
- package/dist/src/mutation-node/union-variant.test.js +27 -0
- package/dist/src/mutation-node/union-variant.test.js.map +1 -0
- package/dist/src/mutation-node/union.d.ts +8 -0
- package/dist/src/mutation-node/union.d.ts.map +1 -0
- package/dist/src/mutation-node/union.js +30 -0
- package/dist/src/mutation-node/union.js.map +1 -0
- package/dist/src/mutation-node/union.test.d.ts +2 -0
- package/dist/src/mutation-node/union.test.d.ts.map +1 -0
- package/dist/src/mutation-node/union.test.js +25 -0
- package/dist/src/mutation-node/union.test.js.map +1 -0
- package/dist/test/test-host.d.ts +2 -0
- package/dist/test/test-host.d.ts.map +1 -0
- package/dist/test/test-host.js +6 -0
- package/dist/test/test-host.js.map +1 -0
- package/dist/test/utils.d.ts +4 -0
- package/dist/test/utils.d.ts.map +1 -0
- package/dist/test/utils.js +8 -0
- package/dist/test/utils.js.map +1 -0
- package/package.json +40 -0
- package/package.json.bak +42 -0
- package/readme.md +339 -0
- package/src/index.ts +4 -0
- package/src/mutation/index.ts +12 -0
- package/src/mutation/interface.ts +38 -0
- package/src/mutation/intrinsic.ts +23 -0
- package/src/mutation/literal.ts +29 -0
- package/src/mutation/model-property.ts +35 -0
- package/src/mutation/model.ts +58 -0
- package/src/mutation/mutation-engine.test.ts +202 -0
- package/src/mutation/mutation-engine.ts +288 -0
- package/src/mutation/mutation.ts +90 -0
- package/src/mutation/operation.ts +40 -0
- package/src/mutation/scalar.ts +36 -0
- package/src/mutation/simple-mutation-engine.ts +21 -0
- package/src/mutation/union-variant.ts +30 -0
- package/src/mutation/union.ts +39 -0
- package/src/mutation-node/enum-member.test.ts +26 -0
- package/src/mutation-node/enum-member.ts +8 -0
- package/src/mutation-node/enum.test.ts +26 -0
- package/src/mutation-node/enum.ts +33 -0
- package/src/mutation-node/factory.ts +95 -0
- package/src/mutation-node/index.ts +16 -0
- package/src/mutation-node/interface.ts +33 -0
- package/src/mutation-node/intrinsic.ts +8 -0
- package/src/mutation-node/literal.ts +10 -0
- package/src/mutation-node/model-property.test.ts +136 -0
- package/src/mutation-node/model-property.ts +53 -0
- package/src/mutation-node/model.test.ts +151 -0
- package/src/mutation-node/model.ts +89 -0
- package/src/mutation-node/mutation-edge.ts +43 -0
- package/src/mutation-node/mutation-node.test.ts +94 -0
- package/src/mutation-node/mutation-node.ts +110 -0
- package/src/mutation-node/mutation-subgraph.ts +59 -0
- package/src/mutation-node/operation.ts +49 -0
- package/src/mutation-node/scalar.test.ts +44 -0
- package/src/mutation-node/scalar.ts +32 -0
- package/src/mutation-node/tuple.test.ts +30 -0
- package/src/mutation-node/tuple.ts +35 -0
- package/src/mutation-node/union-variant.test.ts +28 -0
- package/src/mutation-node/union-variant.ts +26 -0
- package/src/mutation-node/union.test.ts +26 -0
- package/src/mutation-node/union.ts +33 -0
- package/test/test-host.ts +6 -0
- package/test/utils.ts +9 -0
- package/tsconfig.json +19 -0
- package/vitest.config.ts +4 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { t } from "@typespec/compiler/testing";
|
|
2
|
+
import { $ } from "@typespec/compiler/typekit";
|
|
3
|
+
import { beforeEach, expect, it } from "vitest";
|
|
4
|
+
import { Tester } from "../../test/test-host.js";
|
|
5
|
+
import { getSubgraph } from "../../test/utils.js";
|
|
6
|
+
let runner;
|
|
7
|
+
beforeEach(async () => {
|
|
8
|
+
runner = await Tester.createInstance();
|
|
9
|
+
});
|
|
10
|
+
it("handles mutation of element types", async () => {
|
|
11
|
+
const { program, Foo, prop, Bar } = await runner.compile(t.code `
|
|
12
|
+
model ${t.model("Foo")} {
|
|
13
|
+
${t.modelProperty("prop")}: [Bar, string];
|
|
14
|
+
}
|
|
15
|
+
model ${t.model("Bar")} {}
|
|
16
|
+
|
|
17
|
+
`);
|
|
18
|
+
const subgraph = getSubgraph(program);
|
|
19
|
+
const fooNode = subgraph.getNode(Foo);
|
|
20
|
+
const propNode = subgraph.getNode(prop);
|
|
21
|
+
const barNode = subgraph.getNode(Bar);
|
|
22
|
+
barNode.mutate();
|
|
23
|
+
expect(barNode.isMutated).toBe(true);
|
|
24
|
+
expect(propNode.isMutated).toBe(true);
|
|
25
|
+
expect(fooNode.isMutated).toBe(true);
|
|
26
|
+
expect(propNode.mutatedType.type.values[0] === barNode.mutatedType).toBeTruthy();
|
|
27
|
+
expect(propNode.mutatedType.type.values[1] === $(program).builtin.string).toBeTruthy();
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=tuple.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuple.test.js","sourceRoot":"","sources":["../../../src/mutation-node/tuple.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAuB,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,4BAA4B,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,IAAI,MAAsB,CAAC;AAC3B,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;cACnD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;UAClB,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;;cAEnB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;;KAEvB,CAAC,CAAC;IACL,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,CAAC,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAE,QAAQ,CAAC,WAAW,CAAC,IAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;IAC5F,MAAM,CAAE,QAAQ,CAAC,WAAW,CAAC,IAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;AACpG,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Type, UnionVariant } from "@typespec/compiler";
|
|
2
|
+
import { MutationNode } from "./mutation-node.js";
|
|
3
|
+
export declare class UnionVariantMutationNode extends MutationNode<UnionVariant> {
|
|
4
|
+
readonly kind = "UnionVariant";
|
|
5
|
+
traverse(): void;
|
|
6
|
+
connectType(typeNode: MutationNode<Type>): void;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=union-variant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-variant.d.ts","sourceRoot":"","sources":["../../../src/mutation-node/union-variant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qBAAa,wBAAyB,SAAQ,YAAY,CAAC,YAAY,CAAC;IACtE,QAAQ,CAAC,IAAI,kBAAkB;IAE/B,QAAQ;IAKR,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC;CAazC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { MutationEdge } from "./mutation-edge.js";
|
|
2
|
+
import { MutationNode } from "./mutation-node.js";
|
|
3
|
+
export class UnionVariantMutationNode extends MutationNode {
|
|
4
|
+
kind = "UnionVariant";
|
|
5
|
+
traverse() {
|
|
6
|
+
const typeNode = this.subgraph.getNode(this.sourceType.type);
|
|
7
|
+
this.connectType(typeNode);
|
|
8
|
+
}
|
|
9
|
+
connectType(typeNode) {
|
|
10
|
+
MutationEdge.create(this, typeNode, {
|
|
11
|
+
onTailMutation: () => {
|
|
12
|
+
this.mutatedType.type = typeNode.mutatedType;
|
|
13
|
+
},
|
|
14
|
+
onTailDeletion: () => {
|
|
15
|
+
this.mutatedType.type = this.$.intrinsic.any;
|
|
16
|
+
},
|
|
17
|
+
onTailReplaced: (newTail) => {
|
|
18
|
+
this.mutatedType.type = newTail.mutatedType;
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=union-variant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-variant.js","sourceRoot":"","sources":["../../../src/mutation-node/union-variant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,wBAAyB,SAAQ,YAA0B;IAC7D,IAAI,GAAG,cAAc,CAAC;IAE/B,QAAQ;QACN,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,QAA4B;QACtC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE;YAClC,cAAc,EAAE,GAAG,EAAE;gBACnB,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;YAC/C,CAAC;YACD,cAAc,EAAE,GAAG,EAAE;gBACnB,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;YAC/C,CAAC;YACD,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-variant.test.d.ts","sourceRoot":"","sources":["../../../src/mutation-node/union-variant.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { t } from "@typespec/compiler/testing";
|
|
2
|
+
import { $ } from "@typespec/compiler/typekit";
|
|
3
|
+
import { beforeEach, expect, it } from "vitest";
|
|
4
|
+
import { Tester } from "../../test/test-host.js";
|
|
5
|
+
import { getSubgraph } from "../../test/utils.js";
|
|
6
|
+
let runner;
|
|
7
|
+
beforeEach(async () => {
|
|
8
|
+
runner = await Tester.createInstance();
|
|
9
|
+
});
|
|
10
|
+
it("handles mutation of variant types", async () => {
|
|
11
|
+
const { program, Foo, v1 } = await runner.compile(t.code `
|
|
12
|
+
union ${t.union("Foo")} {
|
|
13
|
+
${t.unionVariant("v1")}: string;
|
|
14
|
+
v2: int32;
|
|
15
|
+
}
|
|
16
|
+
`);
|
|
17
|
+
const subgraph = getSubgraph(program);
|
|
18
|
+
const fooNode = subgraph.getNode(Foo);
|
|
19
|
+
const v1Node = subgraph.getNode(v1);
|
|
20
|
+
const stringNode = subgraph.getNode($(program).builtin.string);
|
|
21
|
+
stringNode.mutate();
|
|
22
|
+
expect(stringNode.isMutated).toBe(true);
|
|
23
|
+
expect(v1Node.isMutated).toBe(true);
|
|
24
|
+
expect(fooNode.isMutated).toBe(true);
|
|
25
|
+
expect(v1Node.mutatedType.type === stringNode.mutatedType).toBeTruthy();
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=union-variant.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-variant.test.js","sourceRoot":"","sources":["../../../src/mutation-node/union-variant.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAuB,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,4BAA4B,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,IAAI,MAAsB,CAAC;AAC3B,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;cAC5C,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;UAClB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;;;KAGzB,CAAC,CAAC;IAEL,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,UAAU,CAAC,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;AAC1E,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Union, UnionVariant } from "@typespec/compiler";
|
|
2
|
+
import { MutationNode } from "./mutation-node.js";
|
|
3
|
+
export declare class UnionMutationNode extends MutationNode<Union> {
|
|
4
|
+
readonly kind = "Union";
|
|
5
|
+
traverse(): void;
|
|
6
|
+
connectVariant(variantNode: MutationNode<UnionVariant>, sourcePropName: string | symbol): void;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=union.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union.d.ts","sourceRoot":"","sources":["../../../src/mutation-node/union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qBAAa,iBAAkB,SAAQ,YAAY,CAAC,KAAK,CAAC;IACxD,QAAQ,CAAC,IAAI,WAAW;IAExB,QAAQ,IAAI,IAAI;IAOhB,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM;CAkBxF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { MutationEdge } from "./mutation-edge.js";
|
|
2
|
+
import { MutationNode } from "./mutation-node.js";
|
|
3
|
+
export class UnionMutationNode extends MutationNode {
|
|
4
|
+
kind = "Union";
|
|
5
|
+
traverse() {
|
|
6
|
+
for (const variant of this.sourceType.variants.values()) {
|
|
7
|
+
const variantNode = this.subgraph.getNode(variant);
|
|
8
|
+
this.connectVariant(variantNode, variant.name);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
connectVariant(variantNode, sourcePropName) {
|
|
12
|
+
MutationEdge.create(this, variantNode, {
|
|
13
|
+
onTailMutation: () => {
|
|
14
|
+
this.mutatedType.variants.delete(sourcePropName);
|
|
15
|
+
this.mutatedType.variants.set(variantNode.mutatedType.name, variantNode.mutatedType);
|
|
16
|
+
},
|
|
17
|
+
onTailDeletion: () => {
|
|
18
|
+
this.mutatedType.variants.delete(sourcePropName);
|
|
19
|
+
},
|
|
20
|
+
onTailReplaced: (newTail) => {
|
|
21
|
+
if (newTail.mutatedType.kind !== "UnionVariant") {
|
|
22
|
+
throw new Error("Cannot replace union variant with non-union variant type");
|
|
23
|
+
}
|
|
24
|
+
this.mutatedType.variants.delete(sourcePropName);
|
|
25
|
+
this.mutatedType.variants.set(newTail.mutatedType.name, newTail.mutatedType);
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=union.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union.js","sourceRoot":"","sources":["../../../src/mutation-node/union.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,iBAAkB,SAAQ,YAAmB;IAC/C,IAAI,GAAG,OAAO,CAAC;IAExB,QAAQ;QACN,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACxD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,cAAc,CAAC,WAAuC,EAAE,cAA+B;QACrF,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE;YACrC,cAAc,EAAE,GAAG,EAAE;gBACnB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACjD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;YACvF,CAAC;YACD,cAAc,EAAE,GAAG,EAAE;gBACnB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACnD,CAAC;YACD,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC1B,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBAChD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;gBAC9E,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACjD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YAC/E,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union.test.d.ts","sourceRoot":"","sources":["../../../src/mutation-node/union.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { t } from "@typespec/compiler/testing";
|
|
2
|
+
import { beforeEach, expect, it } from "vitest";
|
|
3
|
+
import { Tester } from "../../test/test-host.js";
|
|
4
|
+
import { getSubgraph } from "../../test/utils.js";
|
|
5
|
+
let runner;
|
|
6
|
+
beforeEach(async () => {
|
|
7
|
+
runner = await Tester.createInstance();
|
|
8
|
+
});
|
|
9
|
+
it("handles mutation of variants", async () => {
|
|
10
|
+
const { program, Foo, v1 } = await runner.compile(t.code `
|
|
11
|
+
union ${t.union("Foo")} {
|
|
12
|
+
${t.unionVariant("v1")}: string;
|
|
13
|
+
v2: int32;
|
|
14
|
+
}
|
|
15
|
+
`);
|
|
16
|
+
const subgraph = getSubgraph(program);
|
|
17
|
+
const fooNode = subgraph.getNode(Foo);
|
|
18
|
+
const v1Node = subgraph.getNode(v1);
|
|
19
|
+
v1Node.mutate((clone) => (clone.name = "v1Renamed"));
|
|
20
|
+
expect(v1Node.isMutated).toBe(true);
|
|
21
|
+
expect(fooNode.isMutated).toBe(true);
|
|
22
|
+
expect(fooNode.mutatedType.variants.get("v1") === undefined).toBeTruthy();
|
|
23
|
+
expect(fooNode.mutatedType.variants.get("v1Renamed") === v1Node.mutatedType).toBeTruthy();
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=union.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union.test.js","sourceRoot":"","sources":["../../../src/mutation-node/union.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAuB,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,IAAI,MAAsB,CAAC;AAC3B,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;IAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;cAC5C,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;UAClB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;;;KAGzB,CAAC,CAAC;IAEL,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;IAC1E,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;AAC5F,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-host.d.ts","sourceRoot":"","sources":["../../test/test-host.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,6CAEjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-host.js","sourceRoot":"","sources":["../../test/test-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAE,MAAM,CAAC,IAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;IAClF,SAAS,EAAE,EAAE;CACd,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../test/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAkB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,oBAI3C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { $ } from "@typespec/compiler/typekit";
|
|
2
|
+
import { MutationEngine, MutationSubgraph } from "../src/index.js";
|
|
3
|
+
export function getSubgraph(program) {
|
|
4
|
+
const tk = $(program);
|
|
5
|
+
const engine = new MutationEngine(tk, {});
|
|
6
|
+
return new MutationSubgraph(engine);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../test/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,4BAA4B,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@typespec/mutator-framework",
|
|
3
|
+
"version": "0.12.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/src/index.js",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/microsoft/typespec.git"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/src/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"keywords": [],
|
|
16
|
+
"author": "",
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"description": "",
|
|
19
|
+
"peerDependencies": {
|
|
20
|
+
"@typespec/compiler": "^1.5.0"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/node": "~24.3.0",
|
|
24
|
+
"concurrently": "^9.1.2",
|
|
25
|
+
"prettier": "~3.6.2",
|
|
26
|
+
"@typespec/compiler": "^1.5.0"
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc -p .",
|
|
30
|
+
"clean": "rimraf ./dist",
|
|
31
|
+
"format": "prettier . --write",
|
|
32
|
+
"watch": "tsc -p . --watch",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"test:ui": "vitest --ui",
|
|
35
|
+
"test:watch": "vitest -w",
|
|
36
|
+
"test:ci": "vitest run --coverage --reporter=junit --reporter=default",
|
|
37
|
+
"lint": "eslint . --max-warnings=0",
|
|
38
|
+
"lint:fix": "eslint . --fix"
|
|
39
|
+
}
|
|
40
|
+
}
|
package/package.json.bak
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@typespec/mutator-framework",
|
|
3
|
+
"version": "0.12.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/src/index.js",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/microsoft/typespec.git"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc -p .",
|
|
12
|
+
"clean": "rimraf ./dist",
|
|
13
|
+
"format": "prettier . --write",
|
|
14
|
+
"watch": "tsc -p . --watch",
|
|
15
|
+
"test": "vitest run",
|
|
16
|
+
"test:ui": "vitest --ui",
|
|
17
|
+
"test:watch": "vitest -w",
|
|
18
|
+
"test:ci": "vitest run --coverage --reporter=junit --reporter=default",
|
|
19
|
+
"prepack": "tsx ../../eng/tsp-core/scripts/strip-dev-import-exports.ts",
|
|
20
|
+
"postpack": "tsx ../../eng/tsp-core/scripts/strip-dev-import-exports.ts --restore",
|
|
21
|
+
"lint": "eslint . --max-warnings=0",
|
|
22
|
+
"lint:fix": "eslint . --fix"
|
|
23
|
+
},
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"import": "./dist/src/index.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"keywords": [],
|
|
30
|
+
"author": "",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"description": "",
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@typespec/compiler": "workspace:^"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/node": "~24.3.0",
|
|
38
|
+
"@typespec/compiler": "workspace:^",
|
|
39
|
+
"concurrently": "^9.1.2",
|
|
40
|
+
"prettier": "~3.6.2"
|
|
41
|
+
}
|
|
42
|
+
}
|