@hatiolab/figure-model 0.1.76 → 0.1.78
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/CHANGELOG.md +12 -0
- package/README.md +60 -138
- package/dist/index.d.ts +1 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -26
- package/dist/index.js.map +1 -1
- package/dist/v3-asset-types.d.ts +1 -2
- package/dist/v3-asset-types.d.ts.map +1 -1
- package/dist/v3-asset.js +1 -1
- package/dist/v3-asset.js.map +1 -1
- package/dist/v3-authoring-actions.d.ts +9 -12
- package/dist/v3-authoring-actions.d.ts.map +1 -1
- package/dist/v3-authoring-actions.js +4 -5
- package/dist/v3-authoring-actions.js.map +1 -1
- package/dist/v3-capabilities.js +4 -1
- package/dist/v3-capabilities.js.map +1 -1
- package/dist/v3-cost.d.ts.map +1 -1
- package/dist/v3-cost.js +3 -5
- package/dist/v3-cost.js.map +1 -1
- package/dist/v3-create.d.ts +1 -1
- package/dist/v3-create.d.ts.map +1 -1
- package/dist/v3-examples.js +1 -1
- package/dist/v3-gate.d.ts +7 -8
- package/dist/v3-gate.d.ts.map +1 -1
- package/dist/v3-gate.js +11 -14
- package/dist/v3-gate.js.map +1 -1
- package/dist/v3-graph.d.ts +1 -2
- package/dist/v3-graph.d.ts.map +1 -1
- package/dist/v3-graph.js +5 -7
- package/dist/v3-graph.js.map +1 -1
- package/dist/v3-instance-size.d.ts +3 -5
- package/dist/v3-instance-size.d.ts.map +1 -1
- package/dist/v3-instance-size.js +2 -4
- package/dist/v3-instance-size.js.map +1 -1
- package/dist/v3-kernel-version.d.ts +1 -1
- package/dist/v3-kernel-version.js +1 -1
- package/dist/v3-part-edit.d.ts +4 -5
- package/dist/v3-part-edit.d.ts.map +1 -1
- package/dist/v3-part-edit.js +2 -2
- package/dist/v3-part-edit.js.map +1 -1
- package/dist/v3-proposal.js +1 -1
- package/dist/v3-proposal.js.map +1 -1
- package/dist/v3-release-contract.js +1 -1
- package/dist/v3-release-contract.js.map +1 -1
- package/dist/v3-score.d.ts +4 -5
- package/dist/v3-score.d.ts.map +1 -1
- package/dist/v3-score.js +7 -8
- package/dist/v3-score.js.map +1 -1
- package/dist/v3-words.d.ts +105 -0
- package/dist/v3-words.d.ts.map +1 -0
- package/dist/v3-words.js +107 -0
- package/dist/v3-words.js.map +1 -0
- package/docs/assembly-constraints-v3.md +13 -23
- package/docs/v3-asset-persistence.md +4 -4
- package/docs/v3-common-kernel-experiment.md +1 -1
- package/docs/v3-core-semantics.md +3 -3
- package/docs/v3-cutover.md +5 -3
- package/docs/v3-design.md +13 -26
- package/docs/v3-editor-integration.md +2 -2
- package/docs/v3-full-conveyor-validation.md +3 -3
- package/docs/v3-layout-system.md +1 -1
- package/docs/v3-minimal-model.md +0 -1
- package/docs/v3-motion-contract.md +21 -56
- package/docs/v3-runtime-extraction.md +7 -7
- package/docs/v3-sample-validation-expanded.md +1 -1
- package/docs/v3-sample-validation.md +1 -1
- package/docs/v3-shape-dimension-contract.md +23 -57
- package/docs/v3-status.md +5 -5
- package/docs/v3-storage-integration.md +4 -4
- package/package.json +2 -20
- package/dist/blueprint-shape.d.ts +0 -10
- package/dist/blueprint-shape.d.ts.map +0 -1
- package/dist/blueprint-shape.js +0 -194
- package/dist/blueprint-shape.js.map +0 -1
- package/dist/blueprint.d.ts +0 -73
- package/dist/blueprint.d.ts.map +0 -1
- package/dist/blueprint.js +0 -388
- package/dist/blueprint.js.map +0 -1
- package/dist/cost-chart.d.ts +0 -35
- package/dist/cost-chart.d.ts.map +0 -1
- package/dist/cost-chart.js +0 -150
- package/dist/cost-chart.js.map +0 -1
- package/dist/cost.d.ts +0 -162
- package/dist/cost.d.ts.map +0 -1
- package/dist/cost.js +0 -194
- package/dist/cost.js.map +0 -1
- package/dist/gate.d.ts +0 -65
- package/dist/gate.d.ts.map +0 -1
- package/dist/gate.js +0 -284
- package/dist/gate.js.map +0 -1
- package/dist/grouping.d.ts +0 -121
- package/dist/grouping.d.ts.map +0 -1
- package/dist/grouping.js +0 -224
- package/dist/grouping.js.map +0 -1
- package/dist/keys.d.ts +0 -45
- package/dist/keys.d.ts.map +0 -1
- package/dist/keys.js +0 -84
- package/dist/keys.js.map +0 -1
- package/dist/origin.d.ts +0 -33
- package/dist/origin.d.ts.map +0 -1
- package/dist/origin.js +0 -46
- package/dist/origin.js.map +0 -1
- package/dist/release-contract.d.ts +0 -38
- package/dist/release-contract.d.ts.map +0 -1
- package/dist/release-contract.js +0 -246
- package/dist/release-contract.js.map +0 -1
- package/dist/sizing.d.ts +0 -231
- package/dist/sizing.d.ts.map +0 -1
- package/dist/sizing.js +0 -550
- package/dist/sizing.js.map +0 -1
- package/dist/types.d.ts +0 -1233
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -547
- package/dist/types.js.map +0 -1
- package/dist/v3-from-v2.d.ts +0 -203
- package/dist/v3-from-v2.d.ts.map +0 -1
- package/dist/v3-from-v2.js +0 -2053
- package/dist/v3-from-v2.js.map +0 -1
- package/dist/v3-mesh-compare.d.ts +0 -24
- package/dist/v3-mesh-compare.d.ts.map +0 -1
- package/dist/v3-mesh-compare.js +0 -55
- package/dist/v3-mesh-compare.js.map +0 -1
- package/dist/validate.d.ts +0 -7
- package/dist/validate.d.ts.map +0 -1
- package/dist/validate.js +0 -1119
- package/dist/validate.js.map +0 -1
- package/dist/visual-evidence.d.ts +0 -21
- package/dist/visual-evidence.d.ts.map +0 -1
- package/dist/visual-evidence.js +0 -52
- package/dist/visual-evidence.js.map +0 -1
- package/docs/design.md +0 -193
- package/docs/format-survey.md +0 -108
- package/docs/format.md +0 -704
- package/docs/sizing.md +0 -183
- package/docs/validation.md +0 -357
package/dist/grouping.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["../src/grouping.ts"],"names":[],"mappings":"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"}
|
package/dist/keys.d.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 키 — 무엇을 무엇과 나눠 쓰는지, 무엇을 무엇과 합치는지를 정하는 식.
|
|
3
|
-
*
|
|
4
|
-
* **이 파일이 유일한 기준이다.** 검사(`validate.ts`)와 컴파일(`blueprint.ts`)이 같은
|
|
5
|
-
* 식을 써야 한다. 다르면 「묶음 수 한도를 지켰다」고 검사가 말한 것과 실제로 만들어지는
|
|
6
|
-
* 묶음 수가 어긋나고, 그 어긋남은 오류 없이 성능으로만 나타난다.
|
|
7
|
-
*
|
|
8
|
-
* 여기 있는 이유는 순환 참조 때문이기도 하다 — `blueprint.ts` 가 `validate.ts` 를
|
|
9
|
-
* 부르므로 반대 방향으로 부를 수 없다.
|
|
10
|
-
*/
|
|
11
|
-
import type { FigurePart, PrimitiveKind } from './types.ts';
|
|
12
|
-
/** 부동소수 오차로 키가 갈리지 않게 자릿수를 맞춘다. */
|
|
13
|
-
export declare function q(n: number): number;
|
|
14
|
-
/** 이 프리미티브가 분할 수를 쓰는가 — 곡면이 있는 것만. */
|
|
15
|
-
export declare function usesSegments(primitive: PrimitiveKind): boolean;
|
|
16
|
-
/**
|
|
17
|
-
* GeometryBank 키.
|
|
18
|
-
*
|
|
19
|
-
* **치수가 키에 들어 있다.** 경로에서 오는 형상(rect·polygon)은 단위로 정규화하면
|
|
20
|
-
* 모서리 반경 비율이 망가지므로 치수를 굽고, 대신 같은 치수끼리만 공유한다.
|
|
21
|
-
*/
|
|
22
|
-
export declare function geometryKeyOf(part: FigurePart): string;
|
|
23
|
-
/**
|
|
24
|
-
* MaterialBank 키. 색은 토큰 이름으로 둔다 — 값을 구우면 테마를 바꿔도 안 따라온다.
|
|
25
|
-
*
|
|
26
|
-
* `transparent` 가 키에 들어간다. 투명 재질은 별도 정렬 경로를 타므로 불투명과 합칠 수 없다.
|
|
27
|
-
*/
|
|
28
|
-
export declare function materialKeyOf(part: FigurePart): string;
|
|
29
|
-
/**
|
|
30
|
-
* 병합 단위 키 — 이 키가 같은 부품끼리 한 묶음(= draw call 하나)이 된다.
|
|
31
|
-
*
|
|
32
|
-
* 재질에 슬롯을 더한 것이다. 슬롯이 다르면 재질 인덱스가 달라 합칠 수 없다.
|
|
33
|
-
*
|
|
34
|
-
* **검사와 컴파일이 반드시 이 함수를 쓴다.** 정책이 세는 묶음 수와 실제로 만들어지는
|
|
35
|
-
* 묶음 수가 같아야 「한도를 지켰다」는 말이 뜻을 갖는다.
|
|
36
|
-
*/
|
|
37
|
-
/**
|
|
38
|
-
* 켜진 재질의 창고 열쇠 — 꺼진 것 뒤에 표시 하나를 붙인다.
|
|
39
|
-
*
|
|
40
|
-
* 램프가 아니면 `null`. 두 재질이 창고에 생기지만 **동시에 그려지지 않으므로** 부품
|
|
41
|
-
* 하나는 어느 쪽을 입든 묶음 하나다.
|
|
42
|
-
*/
|
|
43
|
-
export declare function emissiveKeyOf(part: FigurePart): string | null;
|
|
44
|
-
export declare function groupKeyOf(part: FigurePart): string;
|
|
45
|
-
//# sourceMappingURL=keys.d.ts.map
|
package/dist/keys.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG3D,mCAAmC;AACnC,wBAAgB,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnC;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAUtD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAqBtD;AAED;;;;;;;GAOG;AACH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAE7D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEnD"}
|
package/dist/keys.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 키 — 무엇을 무엇과 나눠 쓰는지, 무엇을 무엇과 합치는지를 정하는 식.
|
|
3
|
-
*
|
|
4
|
-
* **이 파일이 유일한 기준이다.** 검사(`validate.ts`)와 컴파일(`blueprint.ts`)이 같은
|
|
5
|
-
* 식을 써야 한다. 다르면 「묶음 수 한도를 지켰다」고 검사가 말한 것과 실제로 만들어지는
|
|
6
|
-
* 묶음 수가 어긋나고, 그 어긋남은 오류 없이 성능으로만 나타난다.
|
|
7
|
-
*
|
|
8
|
-
* 여기 있는 이유는 순환 참조 때문이기도 하다 — `blueprint.ts` 가 `validate.ts` 를
|
|
9
|
-
* 부르므로 반대 방향으로 부를 수 없다.
|
|
10
|
-
*/
|
|
11
|
-
import { SEGMENTED_PRIMITIVES } from "./types.js";
|
|
12
|
-
/** 부동소수 오차로 키가 갈리지 않게 자릿수를 맞춘다. */
|
|
13
|
-
export function q(n) {
|
|
14
|
-
return Math.round(n * 1000) / 1000;
|
|
15
|
-
}
|
|
16
|
-
/** 이 프리미티브가 분할 수를 쓰는가 — 곡면이 있는 것만. */
|
|
17
|
-
export function usesSegments(primitive) {
|
|
18
|
-
return SEGMENTED_PRIMITIVES.includes(primitive);
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* GeometryBank 키.
|
|
22
|
-
*
|
|
23
|
-
* **치수가 키에 들어 있다.** 경로에서 오는 형상(rect·polygon)은 단위로 정규화하면
|
|
24
|
-
* 모서리 반경 비율이 망가지므로 치수를 굽고, 대신 같은 치수끼리만 공유한다.
|
|
25
|
-
*/
|
|
26
|
-
export function geometryKeyOf(part) {
|
|
27
|
-
const { size } = part.transform;
|
|
28
|
-
const dims = `${q(size.x)}x${q(size.y)}x${q(size.z)}`;
|
|
29
|
-
const seg = part.segments === undefined ? '' : `|s${part.segments}`;
|
|
30
|
-
const round = part.shape?.round ? `|r${q(part.shape.round)}` : '';
|
|
31
|
-
const pathLen = part.primitive === 'polygon' ? `|p${part.shape?.path?.length ?? 0}` : '';
|
|
32
|
-
// 두께가 형상을 정한다 — 빼면 두께만 고친 통이 옛 형상을 그대로 받는다.
|
|
33
|
-
const h = part.shape?.hollow;
|
|
34
|
-
const hollow = h ? `|h${q(h.wall)},${q(h.floor ?? h.wall)}` : '';
|
|
35
|
-
return `${part.primitive}|${dims}${seg}${round}${pathLen}${hollow}`;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* MaterialBank 키. 색은 토큰 이름으로 둔다 — 값을 구우면 테마를 바꿔도 안 따라온다.
|
|
39
|
-
*
|
|
40
|
-
* `transparent` 가 키에 들어간다. 투명 재질은 별도 정렬 경로를 타므로 불투명과 합칠 수 없다.
|
|
41
|
-
*/
|
|
42
|
-
export function materialKeyOf(part) {
|
|
43
|
-
const m = part.material;
|
|
44
|
-
// 표면이 키에 들어간다. 같은 색이라도 표면이 다르면 다른 재질이다. 같은 표면끼리는
|
|
45
|
-
// 한 재질을 나눠 쓴다(이름으로 가리키는 고정 자산이라 인스턴스와 무관하다).
|
|
46
|
-
const surface = m.surface ? `s${m.surface.kind}:${m.surface.ref}` : '-';
|
|
47
|
-
/*
|
|
48
|
-
켜진 모습도 키에 들어간다.
|
|
49
|
-
|
|
50
|
-
꺼진 모습이 같아도 켜진 모습이 다르면 **다른 부품**이다. 안 넣으면 둘이 한 묶음으로
|
|
51
|
-
합쳐지고, 그 묶음은 켜진 재질을 하나만 가질 수 있으므로 램프 하나를 켤 때 다른 램프가
|
|
52
|
-
엉뚱한 색으로 따라 켜진다.
|
|
53
|
-
*/
|
|
54
|
-
const spec = m.emissive ? `e${m.emissive.token ?? '='}:${m.emissive.intensity}${m.emissive.on ? ':on' : ''}` : '-';
|
|
55
|
-
return [
|
|
56
|
-
m.token ?? '-',
|
|
57
|
-
m.preset ?? '-',
|
|
58
|
-
m.flatShading ? 'f' : '-',
|
|
59
|
-
m.transparent ? 't' : '-',
|
|
60
|
-
surface,
|
|
61
|
-
spec
|
|
62
|
-
].join('|');
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* 병합 단위 키 — 이 키가 같은 부품끼리 한 묶음(= draw call 하나)이 된다.
|
|
66
|
-
*
|
|
67
|
-
* 재질에 슬롯을 더한 것이다. 슬롯이 다르면 재질 인덱스가 달라 합칠 수 없다.
|
|
68
|
-
*
|
|
69
|
-
* **검사와 컴파일이 반드시 이 함수를 쓴다.** 정책이 세는 묶음 수와 실제로 만들어지는
|
|
70
|
-
* 묶음 수가 같아야 「한도를 지켰다」는 말이 뜻을 갖는다.
|
|
71
|
-
*/
|
|
72
|
-
/**
|
|
73
|
-
* 켜진 재질의 창고 열쇠 — 꺼진 것 뒤에 표시 하나를 붙인다.
|
|
74
|
-
*
|
|
75
|
-
* 램프가 아니면 `null`. 두 재질이 창고에 생기지만 **동시에 그려지지 않으므로** 부품
|
|
76
|
-
* 하나는 어느 쪽을 입든 묶음 하나다.
|
|
77
|
-
*/
|
|
78
|
-
export function emissiveKeyOf(part) {
|
|
79
|
-
return part.material.emissive ? `${materialKeyOf(part)}||emissive` : null;
|
|
80
|
-
}
|
|
81
|
-
export function groupKeyOf(part) {
|
|
82
|
-
return `${materialKeyOf(part)}||${part.materialSlot ?? '-'}`;
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=keys.js.map
|
package/dist/keys.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
|
package/dist/origin.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type { Centred, CentredSource, FigureSource, PartTransform, Vec3 } from './types.ts';
|
|
2
|
-
/**
|
|
3
|
-
* Where a source's coordinates start, and the one place they become the coordinates the rules use.
|
|
4
|
-
*
|
|
5
|
-
* A source measures a part's `position.y` from the bottom face of the base box, and `x` and `z` from
|
|
6
|
-
* its centre (ADR-0065). Moving the bottom face then leaves every part's numbers alone, which is what
|
|
7
|
-
* an author editing a figure's height expects.
|
|
8
|
-
*
|
|
9
|
-
* Everything past the entry points works in box-centred coordinates: compile, the policy checks,
|
|
10
|
-
* sizing and the release gate, exactly as the blueprint and the scene runtime always have. The rules
|
|
11
|
-
* that read which face a part is nearest to depend on that — the automatic anchor is the sign of a
|
|
12
|
-
* centred position. So only the functions that accept a source, or a part taken from one, call into
|
|
13
|
-
* this file, and nothing below them changes.
|
|
14
|
-
*/
|
|
15
|
-
/**
|
|
16
|
-
* Rounds away the floating-point residue of shifting by half the box height.
|
|
17
|
-
*
|
|
18
|
-
* `0.1445 + 150 - 150` is `0.14449999999999363`, so a source moved to edition 2 and centred again would
|
|
19
|
-
* not reproduce the number it started from. A millionth of a millimetre is finer than anything the
|
|
20
|
-
* modeller writes (four decimals), so it removes the residue without changing an authored value.
|
|
21
|
-
*/
|
|
22
|
-
export declare function roundShift(value: number): number;
|
|
23
|
-
/** A part in box-centred coordinates. */
|
|
24
|
-
export declare function centredPart<P extends {
|
|
25
|
-
transform: PartTransform;
|
|
26
|
-
}>(part: P, base: Vec3): Centred<P>;
|
|
27
|
-
/** A joint whose origin is in box-centred coordinates. */
|
|
28
|
-
export declare function centredJoint<J extends {
|
|
29
|
-
origin: Vec3;
|
|
30
|
-
}>(joint: J, base: Vec3): Centred<J>;
|
|
31
|
-
/** A source whose parts and joint origins are in box-centred coordinates. Nothing else in it carries a box position. */
|
|
32
|
-
export declare function centredSource(source: FigureSource): CentredSource;
|
|
33
|
-
//# sourceMappingURL=origin.d.ts.map
|
package/dist/origin.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"origin.d.ts","sourceRoot":"","sources":["../src/origin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAE3F;;;;;;;;;;;;GAYG;AAEH;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,yCAAyC;AACzC,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAMnG;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAEzF;AAED,wHAAwH;AACxH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,CAIjE"}
|
package/dist/origin.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Where a source's coordinates start, and the one place they become the coordinates the rules use.
|
|
6
|
-
*
|
|
7
|
-
* A source measures a part's `position.y` from the bottom face of the base box, and `x` and `z` from
|
|
8
|
-
* its centre (ADR-0065). Moving the bottom face then leaves every part's numbers alone, which is what
|
|
9
|
-
* an author editing a figure's height expects.
|
|
10
|
-
*
|
|
11
|
-
* Everything past the entry points works in box-centred coordinates: compile, the policy checks,
|
|
12
|
-
* sizing and the release gate, exactly as the blueprint and the scene runtime always have. The rules
|
|
13
|
-
* that read which face a part is nearest to depend on that — the automatic anchor is the sign of a
|
|
14
|
-
* centred position. So only the functions that accept a source, or a part taken from one, call into
|
|
15
|
-
* this file, and nothing below them changes.
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* Rounds away the floating-point residue of shifting by half the box height.
|
|
19
|
-
*
|
|
20
|
-
* `0.1445 + 150 - 150` is `0.14449999999999363`, so a source moved to edition 2 and centred again would
|
|
21
|
-
* not reproduce the number it started from. A millionth of a millimetre is finer than anything the
|
|
22
|
-
* modeller writes (four decimals), so it removes the residue without changing an authored value.
|
|
23
|
-
*/
|
|
24
|
-
export function roundShift(value) {
|
|
25
|
-
return Math.round(value * 1e6) / 1e6;
|
|
26
|
-
}
|
|
27
|
-
/** A part in box-centred coordinates. */
|
|
28
|
-
export function centredPart(part, base) {
|
|
29
|
-
const { position } = part.transform;
|
|
30
|
-
return {
|
|
31
|
-
...part,
|
|
32
|
-
transform: { ...part.transform, position: { ...position, y: roundShift(position.y - base.y / 2) } }
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/** A joint whose origin is in box-centred coordinates. */
|
|
36
|
-
export function centredJoint(joint, base) {
|
|
37
|
-
return { ...joint, origin: { ...joint.origin, y: roundShift(joint.origin.y - base.y / 2) } };
|
|
38
|
-
}
|
|
39
|
-
/** A source whose parts and joint origins are in box-centred coordinates. Nothing else in it carries a box position. */
|
|
40
|
-
export function centredSource(source) {
|
|
41
|
-
const centred = { ...source, parts: source.parts.map(part => centredPart(part, source.base)) };
|
|
42
|
-
if (source.joints !== undefined)
|
|
43
|
-
centred.joints = source.joints.map(joint => centredJoint(joint, source.base));
|
|
44
|
-
return centred;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=origin.js.map
|
package/dist/origin.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"origin.js","sourceRoot":"","sources":["../src/origin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;;;;;GAYG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;AACtC,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,WAAW,CAAyC,IAAO,EAAE,IAAU;IACrF,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;IACnC,OAAO;QACL,GAAG,IAAI;QACP,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE;KACtF,CAAA;AACjB,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,YAAY,CAA6B,KAAQ,EAAE,IAAU;IAC3E,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAgB,CAAA;AAC5G,CAAC;AAED,wHAAwH;AACxH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA;IAC9F,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9G,OAAO,OAAwB,CAAA;AACjC,CAAC"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { FigureSource } from './types.ts';
|
|
2
|
-
/** 무엇이 달라졌나. 소비처의 식별자·의미를 없애는 일만 막고, 외형 변화는 알린다. */
|
|
3
|
-
export type ContractChangeCode =
|
|
4
|
-
/** 기준 상자의 x:z 비율이 달라졌다 — 이미 놓인 인스턴스의 외형이 달라질 수 있다. */
|
|
5
|
-
'base-ratio-changed'
|
|
6
|
-
/** 배치 기준(floor · ceiling · center)이 달라졌다. */
|
|
7
|
-
| 'placement-changed'
|
|
8
|
-
/** 자리·문·파라미터·능력이 사라졌거나 뜻이 바뀌었다. */
|
|
9
|
-
| 'interface-gone'
|
|
10
|
-
/** 배율 1 에서 센 칸 수가 달라졌다. */
|
|
11
|
-
| 'slot-count-changed'
|
|
12
|
-
/** 기준 상자의 절대 크기가 달라졌다 — 비율은 그대로다. */
|
|
13
|
-
| 'base-size-changed'
|
|
14
|
-
/** 자리·문·파라미터·능력이 새로 생겼다. */
|
|
15
|
-
| 'interface-added'
|
|
16
|
-
/** 자리가 받아 주는 타입이 좁아졌다 — 이미 든 것은 그대로다. */
|
|
17
|
-
| 'accepts-narrowed';
|
|
18
|
-
export interface ContractChange {
|
|
19
|
-
code: ContractChangeCode;
|
|
20
|
-
/** 참이면 발행을 막는다. */
|
|
21
|
-
blocking: boolean;
|
|
22
|
-
/** 무엇의 이야기인가 — 자리·문·파라미터·능력의 이름. 도형 전체의 일이면 없다. */
|
|
23
|
-
subject?: string;
|
|
24
|
-
/** 무엇이 달라졌나. 잰 값으로. */
|
|
25
|
-
message: string;
|
|
26
|
-
/** **왜 그것이 문제인가.** 달라진 것만 말하면 읽는 사람은 「그래서?」에서 멈춘다. */
|
|
27
|
-
why: string;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* 직전 발행판과 견준다. **둘 다 컴파일되는 정본이어야 한다** — 부르는 쪽이 새 정본을 먼저
|
|
31
|
-
* 검사하고, 앞의 것은 발행될 때 이미 통과한 것이다.
|
|
32
|
-
*
|
|
33
|
-
* 낸 목록이 비어 있으면 이 발행은 놓인 것을 건드리지 않는다.
|
|
34
|
-
*/
|
|
35
|
-
export declare function contractChanges(before: FigureSource, after: FigureSource): ContractChange[];
|
|
36
|
-
/** 이 발행이 놓인 것을 깨나. `contractChanges` 를 부르는 쪽의 편의. */
|
|
37
|
-
export declare function breaksContract(changes: readonly ContractChange[]): boolean;
|
|
38
|
-
//# sourceMappingURL=release-contract.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"release-contract.d.ts","sourceRoot":"","sources":["../src/release-contract.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAmB,YAAY,EAAQ,MAAM,YAAY,CAAA;AAsCrE,oDAAoD;AACpD,MAAM,MAAM,kBAAkB;AAC5B,sDAAsD;AACpD,oBAAoB;AACtB,6CAA6C;GAC3C,mBAAmB;AACrB,mCAAmC;GACjC,gBAAgB;AAClB,2BAA2B;GACzB,oBAAoB;AACtB,qCAAqC;GACnC,mBAAmB;AACrB,4BAA4B;GAC1B,iBAAiB;AACnB,yCAAyC;GACvC,kBAAkB,CAAA;AAEtB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAA;IACxB,mBAAmB;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAA;CACZ;AA4ED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,cAAc,EAAE,CA+K3F;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,OAAO,CAE1E"}
|
package/dist/release-contract.js
DELETED
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
import { compile } from "./blueprint.js";
|
|
2
|
-
import { repeatPlan } from "./sizing.js";
|
|
3
|
-
/**
|
|
4
|
-
* 이 자리가 `size` 만 한 인스턴스에서 몇 칸인가. 씬이 `maxCount` 를 세는 식과 같다.
|
|
5
|
-
*
|
|
6
|
-
* 배율은 그 크기를 제 기준 상자로 나눈 값이다 — 씬이 놓인 컴포넌트의 크기로 배율을 구하는 것과
|
|
7
|
-
* 같은 셈이라, 판이 달라도 같은 크기의 인스턴스를 견주게 된다.
|
|
8
|
-
*/
|
|
9
|
-
function countAt(anchor, base, size) {
|
|
10
|
-
const scale = { x: size.x / base.x, y: size.y / base.y, z: size.z / base.z };
|
|
11
|
-
const plan = repeatPlan(anchor, scale, base);
|
|
12
|
-
if (plan)
|
|
13
|
-
return plan.count;
|
|
14
|
-
return anchor.capacity ?? 1;
|
|
15
|
-
}
|
|
16
|
-
function rolesOf(anchor) {
|
|
17
|
-
return [...anchor.roles].sort().join(' · ');
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* 견줄 수 있는 모습으로 편다. 청사진에서 읽는 이유는 **소비자가 읽는 것이 청사진**이기 때문이다 —
|
|
21
|
-
* 정본에 어떻게 적혀 있든 소비처에 가는 것은 컴파일된 결과다.
|
|
22
|
-
*/
|
|
23
|
-
function interfaceOf(source, at) {
|
|
24
|
-
const blueprint = compile(source);
|
|
25
|
-
const base = blueprint.base;
|
|
26
|
-
const size = at ?? base;
|
|
27
|
-
return {
|
|
28
|
-
base,
|
|
29
|
-
placement: source.placement ?? 'floor',
|
|
30
|
-
anchors: new Map((blueprint.anchors ?? []).map(anchor => [anchor.name, anchor])),
|
|
31
|
-
counts: new Map((blueprint.anchors ?? []).map(anchor => [anchor.name, countAt(anchor, base, size)])),
|
|
32
|
-
parameters: new Map((source.parameters ?? []).map(one => [one.name, one])),
|
|
33
|
-
capabilities: new Set(source.capabilities ?? [])
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
/** 두 수가 같은가. 비율은 나눈 값이라 자리끝이 흔들린다. */
|
|
37
|
-
function same(a, b) {
|
|
38
|
-
return Math.abs(a - b) < 1e-9;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* 이전 상자 밖에 있던, 이번에 그대로 둔 부품을 새 상자가 정확히 품었는가.
|
|
42
|
-
*
|
|
43
|
-
* 이 경우는 "비율"이 아니라 "HMI가 50mm 나가 있어 폭을 넓혔다"고 말할 수 있는 근거다.
|
|
44
|
-
* 부품도 함께 움직였거나 새 상자가 그 끝에 맞지 않으면 원인을 꾸며 내지 않고 undefined를 돌린다.
|
|
45
|
-
*/
|
|
46
|
-
function expansionCause(before, after) {
|
|
47
|
-
for (const axis of ['x', 'z']) {
|
|
48
|
-
if (after.base[axis] <= before.base[axis])
|
|
49
|
-
continue;
|
|
50
|
-
const former = new Map(before.parts.map(part => [part.name, part]));
|
|
51
|
-
for (const part of after.parts) {
|
|
52
|
-
const previous = former.get(part.name);
|
|
53
|
-
if (!previous || JSON.stringify(previous.transform) !== JSON.stringify(part.transform))
|
|
54
|
-
continue;
|
|
55
|
-
const extent = Math.abs(part.transform.position[axis]) + part.transform.size[axis] / 2;
|
|
56
|
-
const excess = extent - before.base[axis] / 2;
|
|
57
|
-
if (excess <= 0 || !same(extent, after.base[axis] / 2))
|
|
58
|
-
continue;
|
|
59
|
-
return {
|
|
60
|
-
part: part.name === 'hmi' ? 'HMI' : `「${part.name}」`,
|
|
61
|
-
axis,
|
|
62
|
-
direction: axis === 'x' ? (part.transform.position.x >= 0 ? '오른쪽' : '왼쪽') : (part.transform.position.z >= 0 ? '앞쪽' : '뒤쪽'),
|
|
63
|
-
excess,
|
|
64
|
-
before: before.base[axis],
|
|
65
|
-
after: after.base[axis]
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* 직전 발행판과 견준다. **둘 다 컴파일되는 정본이어야 한다** — 부르는 쪽이 새 정본을 먼저
|
|
72
|
-
* 검사하고, 앞의 것은 발행될 때 이미 통과한 것이다.
|
|
73
|
-
*
|
|
74
|
-
* 낸 목록이 비어 있으면 이 발행은 놓인 것을 건드리지 않는다.
|
|
75
|
-
*/
|
|
76
|
-
export function contractChanges(before, after) {
|
|
77
|
-
const was = interfaceOf(before);
|
|
78
|
-
// 칸 수는 **앞 발행판의 크기에서** 센다. 그 크기가 놓여 있는 것들이 실제로 든 크기다.
|
|
79
|
-
const now = interfaceOf(after, was.base);
|
|
80
|
-
const changes = [];
|
|
81
|
-
/*
|
|
82
|
-
비율을 먼저 본다. 두 축을 같은 배로 키운 것은 비율이 같아 여기 안 걸리고 절대 크기 알림만 낸다 —
|
|
83
|
-
ADR-0044 ④ 가 요구하는 「넘침을 base 하나로 고치는」 길이 막히지 않게 하는 것이 그 줄이다.
|
|
84
|
-
*/
|
|
85
|
-
const wasRatio = was.base.x / was.base.z;
|
|
86
|
-
const nowRatio = now.base.x / now.base.z;
|
|
87
|
-
if (!same(wasRatio, nowRatio)) {
|
|
88
|
-
const cause = expansionCause(before, after);
|
|
89
|
-
const dimension = cause?.axis === 'x' ? '폭' : '깊이';
|
|
90
|
-
changes.push({
|
|
91
|
-
code: 'base-ratio-changed',
|
|
92
|
-
/*
|
|
93
|
-
* 최초 발행판의 외형을 영구히 고정하는 것은 리비전의 목적과 맞지 않는다. 소비처 색인이나
|
|
94
|
-
* 배치 마이그레이션이 아직 없는 상태에서 이 사실을 발행 거절로 바꾸면, 최초 모델의 측정
|
|
95
|
-
* 오류를 고칠 길까지 막는다. 따라서 영향은 분명히 알리되, 식별자·자리처럼 실제 참조를
|
|
96
|
-
* 끊는 변화와 달리 발행은 허용한다.
|
|
97
|
-
*/
|
|
98
|
-
blocking: false,
|
|
99
|
-
message: cause
|
|
100
|
-
? `${cause.part}가 기존 모델 영역을 ${cause.direction}으로 ${cause.excess}mm 벗어나 있어 모델 ${dimension}을 ${cause.before}mm에서 ${cause.after}mm로 넓혔습니다.`
|
|
101
|
-
: `모델 외곽의 폭·깊이 비율이 바뀌었습니다 — ${was.base.x}×${was.base.z}mm → ${now.base.x}×${now.base.z}mm.`,
|
|
102
|
-
why: cause
|
|
103
|
-
? '부품의 모양과 위치는 바뀌지 않았습니다. 조정된 모델 외곽을 유지하거나 이전 폭·깊이로 되돌릴 수 있습니다.'
|
|
104
|
-
: '현재 모델 외곽으로 발행하면 이전 발행본과 보이는 폭·깊이가 달라집니다. 이번 리비전의 의도된 외형이면 그대로 발행할 수 있습니다.'
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
else if (!same(was.base.x, now.base.x) || !same(was.base.y, now.base.y) || !same(was.base.z, now.base.z)) {
|
|
108
|
-
changes.push({
|
|
109
|
-
code: 'base-size-changed',
|
|
110
|
-
blocking: false,
|
|
111
|
-
message: `기준 상자가 달라졌다 — ${was.base.x}×${was.base.y}×${was.base.z} → ${now.base.x}×${now.base.y}×${now.base.z}`,
|
|
112
|
-
why: '비율이 같아 모양은 견디지만, 실척으로 놓인 인스턴스는 크기가 맞지 않게 된다.'
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
if (was.placement !== now.placement) {
|
|
116
|
-
changes.push({
|
|
117
|
-
code: 'placement-changed',
|
|
118
|
-
blocking: true,
|
|
119
|
-
message: `배치 기준이 달라졌다 — ${was.placement} → ${now.placement}`,
|
|
120
|
-
why: '놓인 인스턴스의 높이를 배치 기준이 정한다. floor 가 ceiling 이 되면 놓인 것이 전부 천장으로 간다.'
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
for (const [name, anchor] of was.anchors) {
|
|
124
|
-
const next = now.anchors.get(name);
|
|
125
|
-
if (!next) {
|
|
126
|
-
changes.push({
|
|
127
|
-
code: 'interface-gone',
|
|
128
|
-
blocking: true,
|
|
129
|
-
subject: name,
|
|
130
|
-
message: `${rolesOf(anchor)} 「${name}」 이 없어졌다`,
|
|
131
|
-
why: '그 이름으로 물건을 앉히거나 연결선을 매던 쪽에서 조용히 없는 것이 된다. 이름을 바꾸는 것도 여기에 걸린다 — 부르는 쪽은 옛 이름을 든다.'
|
|
132
|
-
});
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
if (rolesOf(anchor) !== rolesOf(next)) {
|
|
136
|
-
changes.push({
|
|
137
|
-
code: 'interface-gone',
|
|
138
|
-
blocking: true,
|
|
139
|
-
subject: name,
|
|
140
|
-
message: `「${name}」 의 역할이 달라졌다 — ${rolesOf(anchor)} → ${rolesOf(next)}`,
|
|
141
|
-
why: '자리였던 것이 문이 되면 거기 있던 물건의 자리가 없어진다.'
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
const wasCount = was.counts.get(name) ?? 1;
|
|
145
|
-
const nowCount = now.counts.get(name) ?? 1;
|
|
146
|
-
if (wasCount !== nowCount) {
|
|
147
|
-
changes.push({
|
|
148
|
-
code: 'slot-count-changed',
|
|
149
|
-
blocking: true,
|
|
150
|
-
subject: name,
|
|
151
|
-
message: `「${name}」 의 칸 수가 달라졌다 — ${was.base.x}×${was.base.y}×${was.base.z} 인스턴스에서 ${wasCount} → ${nowCount}`,
|
|
152
|
-
why: '앞 발행판과 같은 크기에서 센 수다. 반복하는 자리는 간격이 칸 수를 정하므로 기준 상자를 안 건드려도 달라지고, 줄면 거기 든 것이 갈 곳을 잃는다.'
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
const wasAccepts = anchor.accepts;
|
|
156
|
-
const nowAccepts = next.accepts;
|
|
157
|
-
if (wasAccepts?.length) {
|
|
158
|
-
const narrowed = nowAccepts?.length ? wasAccepts.filter(one => !nowAccepts.includes(one)) : [];
|
|
159
|
-
// 목록이 아예 없어진 것은 「아무거나」라 넓어진 것이다.
|
|
160
|
-
if (narrowed.length > 0) {
|
|
161
|
-
changes.push({
|
|
162
|
-
code: 'accepts-narrowed',
|
|
163
|
-
blocking: false,
|
|
164
|
-
subject: name,
|
|
165
|
-
message: `「${name}」 이 ${narrowed.join(' · ')} 를 더 받지 않는다`,
|
|
166
|
-
why: '이미 든 것은 그대로 있고, 다음에 놓는 것부터 거절된다.'
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
for (const name of now.anchors.keys()) {
|
|
172
|
-
if (was.anchors.has(name))
|
|
173
|
-
continue;
|
|
174
|
-
const anchor = now.anchors.get(name);
|
|
175
|
-
changes.push({
|
|
176
|
-
code: 'interface-added',
|
|
177
|
-
blocking: false,
|
|
178
|
-
subject: name,
|
|
179
|
-
message: `${rolesOf(anchor)} 「${name}」 이 새로 생겼다`,
|
|
180
|
-
why: '놓인 것은 이 자리를 모르므로 지금 그대로 서 있는다.'
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
for (const [name, parameter] of was.parameters) {
|
|
184
|
-
const next = now.parameters.get(name);
|
|
185
|
-
if (!next) {
|
|
186
|
-
changes.push({
|
|
187
|
-
code: 'interface-gone',
|
|
188
|
-
blocking: true,
|
|
189
|
-
subject: name,
|
|
190
|
-
message: `파라미터 「${name}」 이 없어졌다`,
|
|
191
|
-
why: '인스턴스가 그 이름으로 값을 준다. 없어지면 그 값이 아무 일도 하지 않고, 왜 안 움직이는지 화면에는 아무 말도 안 나온다.'
|
|
192
|
-
});
|
|
193
|
-
continue;
|
|
194
|
-
}
|
|
195
|
-
const wasUnit = parameter.range?.unit;
|
|
196
|
-
const nowUnit = next.range?.unit;
|
|
197
|
-
if (wasUnit !== nowUnit) {
|
|
198
|
-
changes.push({
|
|
199
|
-
code: 'interface-gone',
|
|
200
|
-
blocking: true,
|
|
201
|
-
subject: name,
|
|
202
|
-
message: `파라미터 「${name}」 의 단위가 달라졌다 — ${wasUnit ?? '없음'} → ${nowUnit ?? '없음'}`,
|
|
203
|
-
why: '인스턴스가 저장해 둔 수는 그대로다. 단위가 바뀌면 같은 수가 다른 뜻이 되어, 1200mm 내려와 있던 호이스트가 1200도 돈다.'
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
for (const name of now.parameters.keys()) {
|
|
208
|
-
if (was.parameters.has(name))
|
|
209
|
-
continue;
|
|
210
|
-
changes.push({
|
|
211
|
-
code: 'interface-added',
|
|
212
|
-
blocking: false,
|
|
213
|
-
subject: name,
|
|
214
|
-
message: `파라미터 「${name}」 이 새로 생겼다`,
|
|
215
|
-
why: '값을 안 주면 기본값에 선다.'
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
for (const capability of was.capabilities) {
|
|
219
|
-
if (now.capabilities.has(capability))
|
|
220
|
-
continue;
|
|
221
|
-
changes.push({
|
|
222
|
-
code: 'interface-gone',
|
|
223
|
-
blocking: true,
|
|
224
|
-
subject: capability,
|
|
225
|
-
message: `능력 「${capability}」 이 없어졌다`,
|
|
226
|
-
why: '그 능력으로 물건을 받고 보내던 씬이 있다. 능력이 빠지면 그 컴포넌트는 물건을 받을 수 없게 된다.'
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
for (const capability of now.capabilities) {
|
|
230
|
-
if (was.capabilities.has(capability))
|
|
231
|
-
continue;
|
|
232
|
-
changes.push({
|
|
233
|
-
code: 'interface-added',
|
|
234
|
-
blocking: false,
|
|
235
|
-
subject: capability,
|
|
236
|
-
message: `능력 「${capability}」 이 새로 생겼다`,
|
|
237
|
-
why: '없던 일을 더 하는 것이라 놓인 것은 그대로 서 있는다.'
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
return changes;
|
|
241
|
-
}
|
|
242
|
-
/** 이 발행이 놓인 것을 깨나. `contractChanges` 를 부르는 쪽의 편의. */
|
|
243
|
-
export function breaksContract(changes) {
|
|
244
|
-
return changes.some(one => one.blocking);
|
|
245
|
-
}
|
|
246
|
-
//# sourceMappingURL=release-contract.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"release-contract.js","sourceRoot":"","sources":["../src/release-contract.ts"],"names":[],"mappings":"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"}
|