draft-ole 0.9.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/README.ja.md +134 -0
- package/README.md +128 -0
- package/dist/chunk-5BNNDTRT.js +95 -0
- package/dist/chunk-5BNNDTRT.js.map +1 -0
- package/dist/chunk-STLTIBMA.js +7658 -0
- package/dist/chunk-STLTIBMA.js.map +1 -0
- package/dist/chunk-YK4Y4ENL.js +389 -0
- package/dist/chunk-YK4Y4ENL.js.map +1 -0
- package/dist/entries/app.cjs +7337 -0
- package/dist/entries/app.cjs.map +1 -0
- package/dist/entries/app.d.cts +115 -0
- package/dist/entries/app.d.ts +115 -0
- package/dist/entries/app.js +10 -0
- package/dist/entries/app.js.map +1 -0
- package/dist/entries/page.cjs +7558 -0
- package/dist/entries/page.cjs.map +1 -0
- package/dist/entries/page.d.cts +2 -0
- package/dist/entries/page.d.ts +2 -0
- package/dist/entries/page.js +30 -0
- package/dist/entries/page.js.map +1 -0
- package/dist/index.cjs +10524 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +4700 -0
- package/dist/index.d.ts +4700 -0
- package/dist/index.js +2573 -0
- package/dist/index.js.map +1 -0
- package/dist/page-DylNkWXm.d.ts +366 -0
- package/dist/page-h3DPzs8l.d.cts +366 -0
- package/dist/transformer/call-detector.d.ts +38 -0
- package/dist/transformer/call-detector.d.ts.map +1 -0
- package/dist/transformer/call-detector.js +151 -0
- package/dist/transformer/call-detector.js.map +1 -0
- package/dist/transformer/command-injector.d.ts +27 -0
- package/dist/transformer/command-injector.d.ts.map +1 -0
- package/dist/transformer/command-injector.js +111 -0
- package/dist/transformer/command-injector.js.map +1 -0
- package/dist/transformer/diagnostic-reporter.d.ts +81 -0
- package/dist/transformer/diagnostic-reporter.d.ts.map +1 -0
- package/dist/transformer/diagnostic-reporter.js +330 -0
- package/dist/transformer/diagnostic-reporter.js.map +1 -0
- package/dist/transformer/each-scope-branch.d.ts +28 -0
- package/dist/transformer/each-scope-branch.d.ts.map +1 -0
- package/dist/transformer/each-scope-branch.js +95 -0
- package/dist/transformer/each-scope-branch.js.map +1 -0
- package/dist/transformer/each-state-rewriter.d.ts +117 -0
- package/dist/transformer/each-state-rewriter.d.ts.map +1 -0
- package/dist/transformer/each-state-rewriter.js +393 -0
- package/dist/transformer/each-state-rewriter.js.map +1 -0
- package/dist/transformer/format-diagnostics.d.ts +27 -0
- package/dist/transformer/format-diagnostics.d.ts.map +1 -0
- package/dist/transformer/format-diagnostics.js +50 -0
- package/dist/transformer/format-diagnostics.js.map +1 -0
- package/dist/transformer/handler-ir-extractor.d.ts +71 -0
- package/dist/transformer/handler-ir-extractor.d.ts.map +1 -0
- package/dist/transformer/handler-ir-extractor.js +171 -0
- package/dist/transformer/handler-ir-extractor.js.map +1 -0
- package/dist/transformer/handler-serializer.d.ts +56 -0
- package/dist/transformer/handler-serializer.d.ts.map +1 -0
- package/dist/transformer/handler-serializer.js +315 -0
- package/dist/transformer/handler-serializer.js.map +1 -0
- package/dist/transformer/helper-context-resolver.d.ts +180 -0
- package/dist/transformer/helper-context-resolver.d.ts.map +1 -0
- package/dist/transformer/helper-context-resolver.js +376 -0
- package/dist/transformer/helper-context-resolver.js.map +1 -0
- package/dist/transformer/helper-decl-utils.d.ts +28 -0
- package/dist/transformer/helper-decl-utils.d.ts.map +1 -0
- package/dist/transformer/helper-decl-utils.js +92 -0
- package/dist/transformer/helper-decl-utils.js.map +1 -0
- package/dist/transformer/identifier-collector.d.ts +28 -0
- package/dist/transformer/identifier-collector.d.ts.map +1 -0
- package/dist/transformer/identifier-collector.js +184 -0
- package/dist/transformer/identifier-collector.js.map +1 -0
- package/dist/transformer/index.d.ts +56 -0
- package/dist/transformer/index.d.ts.map +1 -0
- package/dist/transformer/index.js +333 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/inline-recovery.d.ts +109 -0
- package/dist/transformer/inline-recovery.d.ts.map +1 -0
- package/dist/transformer/inline-recovery.js +369 -0
- package/dist/transformer/inline-recovery.js.map +1 -0
- package/dist/transformer/label-injector.d.ts +105 -0
- package/dist/transformer/label-injector.d.ts.map +1 -0
- package/dist/transformer/label-injector.js +221 -0
- package/dist/transformer/label-injector.js.map +1 -0
- package/dist/transformer/package.json +3 -0
- package/dist/transformer/per-call-context.d.ts +95 -0
- package/dist/transformer/per-call-context.d.ts.map +1 -0
- package/dist/transformer/per-call-context.js +3 -0
- package/dist/transformer/per-call-context.js.map +1 -0
- package/dist/transformer/state-id-fallback.d.ts +85 -0
- package/dist/transformer/state-id-fallback.d.ts.map +1 -0
- package/dist/transformer/state-id-fallback.js +132 -0
- package/dist/transformer/state-id-fallback.js.map +1 -0
- package/dist/transformer/state-id-resolver.d.ts +104 -0
- package/dist/transformer/state-id-resolver.d.ts.map +1 -0
- package/dist/transformer/state-id-resolver.js +222 -0
- package/dist/transformer/state-id-resolver.js.map +1 -0
- package/dist/transformer/theme-class-detector.d.ts +47 -0
- package/dist/transformer/theme-class-detector.d.ts.map +1 -0
- package/dist/transformer/theme-class-detector.js +242 -0
- package/dist/transformer/theme-class-detector.js.map +1 -0
- package/dist/transformer/varname-resolver.d.ts +53 -0
- package/dist/transformer/varname-resolver.d.ts.map +1 -0
- package/dist/transformer/varname-resolver.js +231 -0
- package/dist/transformer/varname-resolver.js.map +1 -0
- package/dist/transformer/whitelist-registry.d.ts +68 -0
- package/dist/transformer/whitelist-registry.d.ts.map +1 -0
- package/dist/transformer/whitelist-registry.js +122 -0
- package/dist/transformer/whitelist-registry.js.map +1 -0
- package/dist/transformer/whitelist-validator.d.ts +59 -0
- package/dist/transformer/whitelist-validator.d.ts.map +1 -0
- package/dist/transformer/whitelist-validator.js +493 -0
- package/dist/transformer/whitelist-validator.js.map +1 -0
- package/dist/types-BXV3vhHS.d.cts +4590 -0
- package/dist/types-BXV3vhHS.d.ts +4590 -0
- package/package.json +121 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* command-injector: 検査 PASS した `.on` 呼び出しの第2引数を
|
|
4
|
+
* `(s) => s._emitHandlerBody("<serialized>", [<params>])` に書き換え、
|
|
5
|
+
* 生成アロー関数に `_draftoleEmitted = true` マーカーを付与するラッパを挿入する。
|
|
6
|
+
*
|
|
7
|
+
* Task 6.2:
|
|
8
|
+
* - `SerializedHandler { code, params }` を受け取り、`.on` の CallExpression を変換
|
|
9
|
+
* - 書き換え後の第2引数:
|
|
10
|
+
* `Object.assign((s) => s._emitHandlerBody("<code>", [<params>]), { _draftoleEmitted: true })`
|
|
11
|
+
* - `Object.assign` により runtime で `_draftoleEmitted === true` が判定可能になる
|
|
12
|
+
*
|
|
13
|
+
* 対応 requirements: 1.5, 4.1
|
|
14
|
+
* 対応 design: §command-injector, §`.on` 実装側 dispatcher 擬似コード
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
33
|
+
var ownKeys = function(o) {
|
|
34
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
35
|
+
var ar = [];
|
|
36
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
37
|
+
return ar;
|
|
38
|
+
};
|
|
39
|
+
return ownKeys(o);
|
|
40
|
+
};
|
|
41
|
+
return function (mod) {
|
|
42
|
+
if (mod && mod.__esModule) return mod;
|
|
43
|
+
var result = {};
|
|
44
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
45
|
+
__setModuleDefault(result, mod);
|
|
46
|
+
return result;
|
|
47
|
+
};
|
|
48
|
+
})();
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.injectCommand = injectCommand;
|
|
51
|
+
const ts = __importStar(require("typescript"));
|
|
52
|
+
// ---- 公開 API ---------------------------------------------------------------
|
|
53
|
+
/**
|
|
54
|
+
* `.on(event, originalArrow)` の CallExpression を受け取り、
|
|
55
|
+
* 第2引数を `Object.assign((s) => s._emitHandlerBody(...), { _draftoleEmitted: true })`
|
|
56
|
+
* に書き換えた新しい CallExpression を返す。
|
|
57
|
+
*
|
|
58
|
+
* @param callExpr - 元の `.on(event, arrow)` CallExpression
|
|
59
|
+
* @param serialized - `handler-serializer` の出力 `SerializedHandler`
|
|
60
|
+
* @returns 書き換え後の CallExpression
|
|
61
|
+
*/
|
|
62
|
+
function injectCommand(callExpr, serialized) {
|
|
63
|
+
const factory = ts.factory;
|
|
64
|
+
// ---- (s) => s._emitHandlerBody("<code>", [<params>]) を生成 ---------------
|
|
65
|
+
// `s` 仮引数
|
|
66
|
+
const sParam = factory.createParameterDeclaration(
|
|
67
|
+
/* modifiers */ undefined,
|
|
68
|
+
/* dotDotDotToken */ undefined, factory.createIdentifier('s'),
|
|
69
|
+
/* questionToken */ undefined,
|
|
70
|
+
/* type */ undefined,
|
|
71
|
+
/* initializer */ undefined);
|
|
72
|
+
// `s._emitHandlerBody` プロパティアクセス
|
|
73
|
+
const emitHandlerBodyAccess = factory.createPropertyAccessExpression(factory.createIdentifier('s'), factory.createIdentifier('_emitHandlerBody'));
|
|
74
|
+
// params 配列リテラル: ["e"] or []
|
|
75
|
+
const paramsArrayLiteral = factory.createArrayLiteralExpression(serialized.params.map((p) => factory.createStringLiteral(p)),
|
|
76
|
+
/* multiLine */ false);
|
|
77
|
+
// `s._emitHandlerBody("<code>", [<params>])` 呼び出し
|
|
78
|
+
const emitHandlerBodyCall = factory.createCallExpression(emitHandlerBodyAccess,
|
|
79
|
+
/* typeArgs */ undefined, [
|
|
80
|
+
factory.createStringLiteral(serialized.code),
|
|
81
|
+
paramsArrayLiteral,
|
|
82
|
+
]);
|
|
83
|
+
// `(s) => s._emitHandlerBody(...)` アロー関数
|
|
84
|
+
const innerArrow = factory.createArrowFunction(
|
|
85
|
+
/* modifiers */ undefined,
|
|
86
|
+
/* typeParams */ undefined, [sParam],
|
|
87
|
+
/* returnType */ undefined, factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), emitHandlerBodyCall);
|
|
88
|
+
// ---- Object.assign(innerArrow, { _draftoleEmitted: true }) を生成 ----------
|
|
89
|
+
// `{ _draftoleEmitted: true }` オブジェクトリテラル
|
|
90
|
+
const markerObject = factory.createObjectLiteralExpression([
|
|
91
|
+
factory.createPropertyAssignment(factory.createIdentifier('_draftoleEmitted'), factory.createTrue()),
|
|
92
|
+
],
|
|
93
|
+
/* multiLine */ false);
|
|
94
|
+
// `Object.assign(...)` 呼び出し
|
|
95
|
+
const objectAssignCall = factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier('Object'), factory.createIdentifier('assign')),
|
|
96
|
+
/* typeArgs */ undefined, [innerArrow, markerObject]);
|
|
97
|
+
// ---- 元の CallExpression の第2引数を差し替えた新 CallExpression を生成 ------
|
|
98
|
+
// 元の引数リストから第2引数(インデックス1)を objectAssignCall に差し替える。
|
|
99
|
+
// 注意: 第1引数(イベント名)は元の StringLiteral ノードをそのまま渡す。
|
|
100
|
+
// printer は元の SourceFile でのみ正しく出力できるため、テスト側では
|
|
101
|
+
// 呼び出し元の SourceFile を使って printNode すること。
|
|
102
|
+
const originalArgs = callExpr.arguments;
|
|
103
|
+
const newArgs = [
|
|
104
|
+
originalArgs[0], // 第1引数(イベント名)はそのまま保持
|
|
105
|
+
objectAssignCall, // 第2引数を書き換え
|
|
106
|
+
// 追加引数がある場合(通常ない)も保持
|
|
107
|
+
...Array.from(originalArgs).slice(2),
|
|
108
|
+
];
|
|
109
|
+
return factory.updateCallExpression(callExpr, callExpr.expression, callExpr.typeArguments, newArgs);
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=command-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-injector.js","sourceRoot":"","sources":["../../src/transformer/command-injector.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBH,sCA6FC;AA3GD,+CAAiC;AAGjC,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,SAAgB,aAAa,CAC3B,QAA2B,EAC3B,UAA6B;IAE7B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;IAE3B,2EAA2E;IAE3E,UAAU;IACV,MAAM,MAAM,GAAG,OAAO,CAAC,0BAA0B;IAC/C,eAAe,CAAC,SAAS;IACzB,oBAAoB,CAAC,SAAS,EAC9B,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC;IAC7B,mBAAmB,CAAC,SAAS;IAC7B,UAAU,CAAC,SAAS;IACpB,iBAAiB,CAAC,SAAS,CAC5B,CAAC;IAEF,iCAAiC;IACjC,MAAM,qBAAqB,GAAG,OAAO,CAAC,8BAA8B,CAClE,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAC7B,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAC7C,CAAC;IAEF,6BAA6B;IAC7B,MAAM,kBAAkB,GAAG,OAAO,CAAC,4BAA4B,CAC7D,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC5D,eAAe,CAAC,KAAK,CACtB,CAAC;IAEF,kDAAkD;IAClD,MAAM,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CACtD,qBAAqB;IACrB,cAAc,CAAC,SAAS,EACxB;QACE,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC;QAC5C,kBAAkB;KACnB,CACF,CAAC;IAEF,yCAAyC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB;IAC5C,eAAe,CAAC,SAAS;IACzB,gBAAgB,CAAC,SAAS,EAC1B,CAAC,MAAM,CAAC;IACR,gBAAgB,CAAC,SAAS,EAC1B,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,EACzD,mBAAmB,CACpB,CAAC;IAEF,4EAA4E;IAE5E,0CAA0C;IAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,6BAA6B,CACxD;QACE,OAAO,CAAC,wBAAwB,CAC9B,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAC5C,OAAO,CAAC,UAAU,EAAE,CACrB;KACF;IACD,eAAe,CAAC,KAAK,CACtB,CAAC;IAEF,4BAA4B;IAC5B,MAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CACnD,OAAO,CAAC,8BAA8B,CACpC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAClC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CACnC;IACD,cAAc,CAAC,SAAS,EACxB,CAAC,UAAU,EAAE,YAAY,CAAC,CAC3B,CAAC;IAEF,gEAAgE;IAEhE,mDAAmD;IACnD,+CAA+C;IAC/C,8CAA8C;IAC9C,yCAAyC;IACzC,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC;IACxC,MAAM,OAAO,GAAoB;QAC/B,YAAY,CAAC,CAAC,CAAC,EAAE,qBAAqB;QACtC,gBAAgB,EAAE,YAAY;QAC9B,qBAAqB;QACrB,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KACrC,CAAC;IAEF,OAAO,OAAO,CAAC,oBAAoB,CACjC,QAAQ,EACR,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,aAAa,EACtB,OAAO,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* diagnostic-reporter — `ts.Diagnostic` 組立・集約
|
|
3
|
+
*
|
|
4
|
+
* Task 5.5:
|
|
5
|
+
* - 源位置・識別子名・カテゴリ・修正例テンプレートから `ts.Diagnostic` を組立
|
|
6
|
+
* - エラーコード DT001〜DT010 を割り当てるテーブルを定義
|
|
7
|
+
*
|
|
8
|
+
* 観測可能な完了:
|
|
9
|
+
* `tests/transformer/diagnostic.test.ts` で各カテゴリのメッセージに
|
|
10
|
+
* 「源位置」「識別子名」「修正例」文字列が含まれる
|
|
11
|
+
*
|
|
12
|
+
* 対応 requirements: 2.5, 2.7, 3.3
|
|
13
|
+
* 対応 design: diagnostic-reporter, Error Message Template (DT001〜DT010)
|
|
14
|
+
*/
|
|
15
|
+
import * as ts from 'typescript';
|
|
16
|
+
/**
|
|
17
|
+
* DraftOle transformer のエラーコード識別子。
|
|
18
|
+
* DT001〜DT012 の範囲で割り当てる。
|
|
19
|
+
*/
|
|
20
|
+
export type DiagnosticCode = 'DT001' | 'DT002' | 'DT003' | 'DT004' | 'DT005' | 'DT006' | 'DT007' | 'DT008' | 'DT009' | 'DT010' | 'DT011' | 'DT012' | 'DT013' | 'DT014';
|
|
21
|
+
/**
|
|
22
|
+
* createDiagnostic に渡すデータ。
|
|
23
|
+
* - identifierName: エラーメッセージに埋め込む識別子名
|
|
24
|
+
* - fixExample: 修正例テキスト("root.state(...) で宣言" 等)
|
|
25
|
+
*/
|
|
26
|
+
export interface DiagnosticData {
|
|
27
|
+
/** エラーの原因となった識別子名 */
|
|
28
|
+
readonly identifierName: string;
|
|
29
|
+
/** 修正例テンプレートテキスト */
|
|
30
|
+
readonly fixExample: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* エラーコードテーブルの1エントリ。
|
|
34
|
+
*/
|
|
35
|
+
export interface DiagnosticTableEntry {
|
|
36
|
+
/** TypeScript の diagnostic コード番号(9001〜9010) */
|
|
37
|
+
readonly code: number;
|
|
38
|
+
/**
|
|
39
|
+
* メッセージテンプレート。
|
|
40
|
+
* `{identifierName}` プレースホルダーが identifierName に置換される。
|
|
41
|
+
* `{fixExample}` プレースホルダーが fixExample に置換される。
|
|
42
|
+
*/
|
|
43
|
+
readonly messageTemplate: string;
|
|
44
|
+
/** 汎用的な修正ヒントテキスト(テーブル定義時の既定値) */
|
|
45
|
+
readonly suggestion: string;
|
|
46
|
+
/** ts.DiagnosticCategory */
|
|
47
|
+
readonly category: ts.DiagnosticCategory;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* DT001〜DT010 のエラーコードテーブル。
|
|
51
|
+
*
|
|
52
|
+
* 設計 §Error Message Template を参照(design.md):
|
|
53
|
+
* error DT001: Closure capture outside whitelist ...
|
|
54
|
+
* identifier 'outsideVar' is captured from module scope
|
|
55
|
+
* note: allowed: state API ...
|
|
56
|
+
* help: if 'outsideVar' is a state, declare it via root.state(...)
|
|
57
|
+
*
|
|
58
|
+
* 真実の源泉は 1 つ(Design D-6): 全エラーはここで一元定義する。
|
|
59
|
+
*/
|
|
60
|
+
export declare const DIAGNOSTIC_TABLE: Readonly<Record<DiagnosticCode, DiagnosticTableEntry>>;
|
|
61
|
+
/**
|
|
62
|
+
* エラーコード・ノード・sourceFile・データから `ts.Diagnostic` を組み立てる。
|
|
63
|
+
*
|
|
64
|
+
* 組み立てルール(Req 2.5, 3.3):
|
|
65
|
+
* 1. `node.getStart()` で源位置(start)を計算する
|
|
66
|
+
* 2. `node.getWidth()` で長さ(length)を計算する
|
|
67
|
+
* 3. messageTemplate 内の `{identifierName}` を data.identifierName で置換する
|
|
68
|
+
* 4. messageTemplate 内の `{fixExample}` を data.fixExample で置換する
|
|
69
|
+
* 5. `file` を sourceFile に設定する
|
|
70
|
+
* 6. `category` をテーブルから取得する
|
|
71
|
+
* 7. `code` をテーブルから取得する
|
|
72
|
+
* 8. `source` を 'draftole-transformer' に設定する
|
|
73
|
+
*
|
|
74
|
+
* @param diagnosticCode DiagnosticCode (DT001〜DT010)
|
|
75
|
+
* @param node エラー対象の ts.Node(位置計算に使用)
|
|
76
|
+
* @param sourceFile 対象ソースファイル
|
|
77
|
+
* @param data 識別子名と修正例
|
|
78
|
+
* @returns 組み立てた ts.Diagnostic
|
|
79
|
+
*/
|
|
80
|
+
export declare function createDiagnostic(diagnosticCode: DiagnosticCode, node: ts.Node, sourceFile: ts.SourceFile, data: DiagnosticData): ts.Diagnostic;
|
|
81
|
+
//# sourceMappingURL=diagnostic-reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostic-reporter.d.ts","sourceRoot":"","sources":["../../src/transformer/diagnostic-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAIjC;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,CAAC;AAEZ;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,qBAAqB;IACrB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,oBAAoB;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,iCAAiC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,4BAA4B;IAC5B,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC;CAC1C;AAID;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAAC,CA0QnF,CAAC;AAIF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,IAAI,EAAE,cAAc,GACnB,EAAE,CAAC,UAAU,CAqBf"}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* diagnostic-reporter — `ts.Diagnostic` 組立・集約
|
|
4
|
+
*
|
|
5
|
+
* Task 5.5:
|
|
6
|
+
* - 源位置・識別子名・カテゴリ・修正例テンプレートから `ts.Diagnostic` を組立
|
|
7
|
+
* - エラーコード DT001〜DT010 を割り当てるテーブルを定義
|
|
8
|
+
*
|
|
9
|
+
* 観測可能な完了:
|
|
10
|
+
* `tests/transformer/diagnostic.test.ts` で各カテゴリのメッセージに
|
|
11
|
+
* 「源位置」「識別子名」「修正例」文字列が含まれる
|
|
12
|
+
*
|
|
13
|
+
* 対応 requirements: 2.5, 2.7, 3.3
|
|
14
|
+
* 対応 design: diagnostic-reporter, Error Message Template (DT001〜DT010)
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
33
|
+
var ownKeys = function(o) {
|
|
34
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
35
|
+
var ar = [];
|
|
36
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
37
|
+
return ar;
|
|
38
|
+
};
|
|
39
|
+
return ownKeys(o);
|
|
40
|
+
};
|
|
41
|
+
return function (mod) {
|
|
42
|
+
if (mod && mod.__esModule) return mod;
|
|
43
|
+
var result = {};
|
|
44
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
45
|
+
__setModuleDefault(result, mod);
|
|
46
|
+
return result;
|
|
47
|
+
};
|
|
48
|
+
})();
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.DIAGNOSTIC_TABLE = void 0;
|
|
51
|
+
exports.createDiagnostic = createDiagnostic;
|
|
52
|
+
const ts = __importStar(require("typescript"));
|
|
53
|
+
// ---- DIAGNOSTIC_TABLE -------------------------------------------------------
|
|
54
|
+
/**
|
|
55
|
+
* DT001〜DT010 のエラーコードテーブル。
|
|
56
|
+
*
|
|
57
|
+
* 設計 §Error Message Template を参照(design.md):
|
|
58
|
+
* error DT001: Closure capture outside whitelist ...
|
|
59
|
+
* identifier 'outsideVar' is captured from module scope
|
|
60
|
+
* note: allowed: state API ...
|
|
61
|
+
* help: if 'outsideVar' is a state, declare it via root.state(...)
|
|
62
|
+
*
|
|
63
|
+
* 真実の源泉は 1 つ(Design D-6): 全エラーはここで一元定義する。
|
|
64
|
+
*/
|
|
65
|
+
exports.DIAGNOSTIC_TABLE = {
|
|
66
|
+
/**
|
|
67
|
+
* DT001: ホワイトリスト外のクロージャ捕捉(Req 3.2, 3.3)
|
|
68
|
+
*
|
|
69
|
+
* 発生条件: ハンドラ本体内で、state API / event-param / local / builtin 以外の
|
|
70
|
+
* 識別子を参照した場合
|
|
71
|
+
*/
|
|
72
|
+
DT001: {
|
|
73
|
+
code: 9001,
|
|
74
|
+
messageTemplate: "DT001: Closure capture outside whitelist is not allowed in DraftOle handlers. " +
|
|
75
|
+
"Identifier '{identifierName}' is captured from outer scope. " +
|
|
76
|
+
"Allowed: state API (root.state / .get / .set / .update / .map / .field / .each), " +
|
|
77
|
+
"event argument (first parameter), built-ins (Math, JSON, String, Number, ...). " +
|
|
78
|
+
"Fix: {fixExample}",
|
|
79
|
+
suggestion: "If the identifier is a state, declare it via 'root.state(...)' and call through that handle. " +
|
|
80
|
+
"See docs/api/handler-serialization.md",
|
|
81
|
+
category: ts.DiagnosticCategory.Error,
|
|
82
|
+
},
|
|
83
|
+
/**
|
|
84
|
+
* DT002: 空本体の警告(Req 2.6)
|
|
85
|
+
*
|
|
86
|
+
* 発生条件: `() => {}` のように本体が空のアロー関数が渡された場合。
|
|
87
|
+
* ビルドは継続するが警告を出す。
|
|
88
|
+
*/
|
|
89
|
+
DT002: {
|
|
90
|
+
code: 9002,
|
|
91
|
+
messageTemplate: "DT002: Arrow function handler '{identifierName}' has empty body '() => {}'. " +
|
|
92
|
+
"This handler will be registered but will have no effect. " +
|
|
93
|
+
"Fix: {fixExample}",
|
|
94
|
+
suggestion: "ハンドラ本体に処理を追加してください。" +
|
|
95
|
+
"See docs/api/handler-serialization.md",
|
|
96
|
+
category: ts.DiagnosticCategory.Warning,
|
|
97
|
+
},
|
|
98
|
+
/**
|
|
99
|
+
* DT003: 非アロー関数エラー(Req 2.4)
|
|
100
|
+
*
|
|
101
|
+
* 発生条件: `.on` の第2引数として、アロー関数ではなく関数宣言・メソッド参照・
|
|
102
|
+
* 変数経由ハンドラ等が渡された場合
|
|
103
|
+
*/
|
|
104
|
+
DT003: {
|
|
105
|
+
code: 9003,
|
|
106
|
+
messageTemplate: "DT003: '.on' second argument must be an arrow function, but got '{identifierName}'. " +
|
|
107
|
+
"Only arrow functions are supported by the DraftOle transformer. " +
|
|
108
|
+
"Fix: {fixExample}",
|
|
109
|
+
suggestion: "アロー関数 (e) => { ... } を使用してください。" +
|
|
110
|
+
"See docs/api/handler-serialization.md",
|
|
111
|
+
category: ts.DiagnosticCategory.Error,
|
|
112
|
+
},
|
|
113
|
+
/**
|
|
114
|
+
* DT004: async/await 禁止(Req 4.8)
|
|
115
|
+
*
|
|
116
|
+
* 発生条件: ハンドラ内に `await` 式が含まれる場合
|
|
117
|
+
*/
|
|
118
|
+
DT004: {
|
|
119
|
+
code: 9004,
|
|
120
|
+
messageTemplate: "DT004: Forbidden syntax 'async/await' is not allowed in DraftOle handlers. " +
|
|
121
|
+
"Identifier '{identifierName}' is used in an async context. " +
|
|
122
|
+
"async/await is not serializable. " +
|
|
123
|
+
"Fix: {fixExample}",
|
|
124
|
+
suggestion: "async/await はシリアライズできません。同期コードに書き換えてください。" +
|
|
125
|
+
"See docs/api/handler-serialization.md",
|
|
126
|
+
category: ts.DiagnosticCategory.Error,
|
|
127
|
+
},
|
|
128
|
+
/**
|
|
129
|
+
* DT005: yield/generator 禁止(Req 4.8)
|
|
130
|
+
*
|
|
131
|
+
* 発生条件: ハンドラ内に `yield` 式が含まれる場合
|
|
132
|
+
*/
|
|
133
|
+
DT005: {
|
|
134
|
+
code: 9005,
|
|
135
|
+
messageTemplate: "DT005: Forbidden syntax 'yield' is not allowed in DraftOle handlers. " +
|
|
136
|
+
"Identifier '{identifierName}' uses yield/generator syntax. " +
|
|
137
|
+
"Generator functions are not serializable. " +
|
|
138
|
+
"Fix: {fixExample}",
|
|
139
|
+
suggestion: "generator/yield はシリアライズできません。" +
|
|
140
|
+
"See docs/api/handler-serialization.md",
|
|
141
|
+
category: ts.DiagnosticCategory.Error,
|
|
142
|
+
},
|
|
143
|
+
/**
|
|
144
|
+
* DT006: ++ / -- 禁止(Req 4.8)
|
|
145
|
+
*
|
|
146
|
+
* 発生条件: ハンドラ内に後置/前置インクリメント・デクリメント演算子が含まれる場合
|
|
147
|
+
*/
|
|
148
|
+
DT006: {
|
|
149
|
+
code: 9006,
|
|
150
|
+
messageTemplate: "DT006: Forbidden syntax '++/--' is not allowed in DraftOle handlers. " +
|
|
151
|
+
"Identifier '{identifierName}' uses postfix/prefix increment or decrement. " +
|
|
152
|
+
"Use state.update(fn) or state.set(state.get() +/- 1) instead. " +
|
|
153
|
+
"Fix: {fixExample}",
|
|
154
|
+
suggestion: "state.set(state.get() + 1) を使用してください。" +
|
|
155
|
+
"See docs/api/handler-serialization.md",
|
|
156
|
+
category: ts.DiagnosticCategory.Error,
|
|
157
|
+
},
|
|
158
|
+
/**
|
|
159
|
+
* DT007: デコレータ禁止(Req 4.8)
|
|
160
|
+
*
|
|
161
|
+
* 発生条件: ハンドラ内にデコレータ構文が含まれる場合
|
|
162
|
+
*/
|
|
163
|
+
DT007: {
|
|
164
|
+
code: 9007,
|
|
165
|
+
messageTemplate: "DT007: Forbidden syntax 'decorator' is not allowed in DraftOle handlers. " +
|
|
166
|
+
"Identifier '{identifierName}' uses a decorator. " +
|
|
167
|
+
"デコレータはシリアライズできません。" +
|
|
168
|
+
"Fix: {fixExample}",
|
|
169
|
+
suggestion: "デコレータをハンドラ内から取り除いてください。" +
|
|
170
|
+
"See docs/api/handler-serialization.md",
|
|
171
|
+
category: ts.DiagnosticCategory.Error,
|
|
172
|
+
},
|
|
173
|
+
/**
|
|
174
|
+
* DT008: 禁止グローバル(window/globalThis 等)(Req 3.2)
|
|
175
|
+
*
|
|
176
|
+
* 発生条件: ハンドラ内で window / globalThis / global / self を参照した場合
|
|
177
|
+
*/
|
|
178
|
+
DT008: {
|
|
179
|
+
code: 9008,
|
|
180
|
+
messageTemplate: "DT008: Forbidden global '{identifierName}' is not allowed in DraftOle handlers. " +
|
|
181
|
+
"window/globalThis are not available in the serialized handler context. " +
|
|
182
|
+
"Use state API or event parameters instead. " +
|
|
183
|
+
"Fix: {fixExample}",
|
|
184
|
+
suggestion: "window/globalThis はハンドラ内では使用できません。state API を使用してください。" +
|
|
185
|
+
"See docs/api/handler-serialization.md",
|
|
186
|
+
category: ts.DiagnosticCategory.Error,
|
|
187
|
+
},
|
|
188
|
+
/**
|
|
189
|
+
* DT009: transformer 内部エラー
|
|
190
|
+
*
|
|
191
|
+
* 発生条件: transformer 自体の内部例外(TypeScript API 仕様変更等)
|
|
192
|
+
*/
|
|
193
|
+
DT009: {
|
|
194
|
+
code: 9009,
|
|
195
|
+
messageTemplate: "DT009: DraftOle transformer internal error while processing '{identifierName}'. " +
|
|
196
|
+
"This may be caused by a TypeScript version incompatibility. " +
|
|
197
|
+
"バージョンを確認してください。" +
|
|
198
|
+
"Fix: {fixExample}",
|
|
199
|
+
suggestion: "draftole-transformer のバージョンを確認してください。" +
|
|
200
|
+
"See docs/api/handler-serialization.md",
|
|
201
|
+
category: ts.DiagnosticCategory.Error,
|
|
202
|
+
},
|
|
203
|
+
/**
|
|
204
|
+
* DT010: 追加情報・汎用メッセージ
|
|
205
|
+
*
|
|
206
|
+
* 発生条件: 上記以外の追加情報提供が必要な場合
|
|
207
|
+
*/
|
|
208
|
+
DT010: {
|
|
209
|
+
code: 9010,
|
|
210
|
+
messageTemplate: "DT010: DraftOle handler validation note for '{identifierName}'. " +
|
|
211
|
+
"{fixExample}",
|
|
212
|
+
suggestion: "docs/api/handler-serialization.md を参照してください。",
|
|
213
|
+
category: ts.DiagnosticCategory.Message,
|
|
214
|
+
},
|
|
215
|
+
/**
|
|
216
|
+
* DT011: 解決不能 State 識別子(Req 4.1, 4.2)
|
|
217
|
+
*
|
|
218
|
+
* 発生条件: 型リテラル経路でも fallback でも解決できない State 識別子参照
|
|
219
|
+
* (例: 複数 Root、関数ヘルパー経由の State 生成、構造化代入など)。
|
|
220
|
+
* 設計 §`diagnostic-reporter.ts 変更点` を参照。
|
|
221
|
+
*/
|
|
222
|
+
DT011: {
|
|
223
|
+
code: 9011,
|
|
224
|
+
messageTemplate: "DT011: State identifier '{identifierName}' cannot be resolved without fallback assumptions. " +
|
|
225
|
+
"Annotate the State with a string literal type, e.g. {fixExample}.",
|
|
226
|
+
suggestion: "State 宣言に文字列リテラル型注釈を付与してください(例: root.state<\"my-state-id\">(initial))。",
|
|
227
|
+
category: ts.DiagnosticCategory.Error,
|
|
228
|
+
},
|
|
229
|
+
/**
|
|
230
|
+
* DT012: ヘルパー関数インライン展開対象外(transformer-inline-recovery-spec)
|
|
231
|
+
*
|
|
232
|
+
* 発生条件: ハンドラ直下の ExpressionStatement の中で、ヘルパー関数候補が
|
|
233
|
+
* inline recovery のサポート形状(ゼロ引数・モジュールレベル・const アロー・1段)
|
|
234
|
+
* を満たさない場合に発行される。
|
|
235
|
+
*
|
|
236
|
+
* 既定カテゴリは Suggestion(`DraftoleTransformerOptions.strictHelpers: true`
|
|
237
|
+
* で Warning に切替)。Error ではないため、ファイル全体の rewrite 抑制には寄与しない。
|
|
238
|
+
*
|
|
239
|
+
* `inline-recovery.ts` の `buildRejectionDiagnostics` で実際の messageText を
|
|
240
|
+
* 構築するため、ここで定義する `messageTemplate` は createDiagnostic 経由の
|
|
241
|
+
* 簡易呼び出し用(テスト等)にのみ用いられる。
|
|
242
|
+
*/
|
|
243
|
+
DT012: {
|
|
244
|
+
code: 9012,
|
|
245
|
+
messageTemplate: "DT012: Helper '{identifierName}' is not eligible for inline recovery ({fixExample}). " +
|
|
246
|
+
"Supported shape: zero-argument module-level const arrow function, single level.",
|
|
247
|
+
suggestion: "ヘルパーをゼロ引数のモジュールレベル const アロー関数に書き換えるか、ハンドラ本体に展開してください。",
|
|
248
|
+
category: ts.DiagnosticCategory.Suggestion,
|
|
249
|
+
},
|
|
250
|
+
/**
|
|
251
|
+
* DT013: __draftole_label__ 注入不能(class-name-varname-extraction spec)
|
|
252
|
+
*
|
|
253
|
+
* 発生条件: `theme.class(...)` の varName ラベリング対象を検出したが、
|
|
254
|
+
* 当該ファイルに DraftOle からの import が存在せず、`__draftole_label__`
|
|
255
|
+
* を注入できない場合に発行される。
|
|
256
|
+
*
|
|
257
|
+
* Suggestion カテゴリ。Error ではないため、ファイル全体の rewrite 抑制には寄与しない。
|
|
258
|
+
* 該当呼び出しの wrap はスキップされ、クラス名は匿名フォールバック形式となる。
|
|
259
|
+
*/
|
|
260
|
+
DT013: {
|
|
261
|
+
code: 9013,
|
|
262
|
+
messageTemplate: "DT013: Cannot inject __draftole_label__ for theme.class() varName extraction on '{identifierName}': " +
|
|
263
|
+
"no existing DraftOle import found in this file. " +
|
|
264
|
+
"The class name will fall back to the anonymous format. " +
|
|
265
|
+
"Fix: {fixExample}",
|
|
266
|
+
suggestion: "DraftOle からの named import(例: import { Root } from 'draft-ole')を当該ファイルに追加してください。",
|
|
267
|
+
category: ts.DiagnosticCategory.Suggestion,
|
|
268
|
+
},
|
|
269
|
+
/**
|
|
270
|
+
* DT014: enclosing-helper recovery 不可能な helper 形状(helper-inline-recovery spec / TXDX-2)
|
|
271
|
+
*
|
|
272
|
+
* 発生条件: `.on(arrow)` を内包するモジュールレベル helper を発見したが、
|
|
273
|
+
* 採用形状(zero-parameter module-level const arrow function、一貫した
|
|
274
|
+
* each-scope context を持つ call-site 群)を満たさない場合に発行される。
|
|
275
|
+
*
|
|
276
|
+
* 既定カテゴリは Error。`helper-context-resolver.ts` の
|
|
277
|
+
* `buildEnclosingHelperDiagnostic` で実際の messageText を構築するため、
|
|
278
|
+
* ここで定義する `messageTemplate` は createDiagnostic 経由の簡易呼び出し用
|
|
279
|
+
* (テスト等)にのみ用いられる。
|
|
280
|
+
*
|
|
281
|
+
* 注: 本診断は `hasFileError` 集計から除外され、同一ファイル内の他の `.on`
|
|
282
|
+
* 書き換えは継続される(helper 経由箇所のみスキップ)。
|
|
283
|
+
*/
|
|
284
|
+
DT014: {
|
|
285
|
+
code: 9014,
|
|
286
|
+
messageTemplate: "DT014: Enclosing helper '{identifierName}' is not eligible for inline-recovery. Fix: {fixExample}",
|
|
287
|
+
suggestion: "ヘルパーをゼロ引数のモジュールレベル const アロー関数に書き換えるか、呼び出し位置で .on(...) を直接記述してください。",
|
|
288
|
+
category: ts.DiagnosticCategory.Error,
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
// ---- createDiagnostic -------------------------------------------------------
|
|
292
|
+
/**
|
|
293
|
+
* エラーコード・ノード・sourceFile・データから `ts.Diagnostic` を組み立てる。
|
|
294
|
+
*
|
|
295
|
+
* 組み立てルール(Req 2.5, 3.3):
|
|
296
|
+
* 1. `node.getStart()` で源位置(start)を計算する
|
|
297
|
+
* 2. `node.getWidth()` で長さ(length)を計算する
|
|
298
|
+
* 3. messageTemplate 内の `{identifierName}` を data.identifierName で置換する
|
|
299
|
+
* 4. messageTemplate 内の `{fixExample}` を data.fixExample で置換する
|
|
300
|
+
* 5. `file` を sourceFile に設定する
|
|
301
|
+
* 6. `category` をテーブルから取得する
|
|
302
|
+
* 7. `code` をテーブルから取得する
|
|
303
|
+
* 8. `source` を 'draftole-transformer' に設定する
|
|
304
|
+
*
|
|
305
|
+
* @param diagnosticCode DiagnosticCode (DT001〜DT010)
|
|
306
|
+
* @param node エラー対象の ts.Node(位置計算に使用)
|
|
307
|
+
* @param sourceFile 対象ソースファイル
|
|
308
|
+
* @param data 識別子名と修正例
|
|
309
|
+
* @returns 組み立てた ts.Diagnostic
|
|
310
|
+
*/
|
|
311
|
+
function createDiagnostic(diagnosticCode, node, sourceFile, data) {
|
|
312
|
+
const entry = exports.DIAGNOSTIC_TABLE[diagnosticCode];
|
|
313
|
+
// 源位置の計算(Req 2.5)
|
|
314
|
+
const start = node.getStart(sourceFile, false);
|
|
315
|
+
const length = node.getWidth(sourceFile);
|
|
316
|
+
// messageTemplate のプレースホルダー置換
|
|
317
|
+
const messageText = entry.messageTemplate
|
|
318
|
+
.replace(/{identifierName}/g, data.identifierName)
|
|
319
|
+
.replace(/{fixExample}/g, data.fixExample);
|
|
320
|
+
return {
|
|
321
|
+
file: sourceFile,
|
|
322
|
+
start,
|
|
323
|
+
length,
|
|
324
|
+
messageText,
|
|
325
|
+
category: entry.category,
|
|
326
|
+
code: entry.code,
|
|
327
|
+
source: 'draftole-transformer',
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=diagnostic-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostic-reporter.js","sourceRoot":"","sources":["../../src/transformer/diagnostic-reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* each-scope-branch — Phase 4b per-call delegate
|
|
3
|
+
*
|
|
4
|
+
* (transformer-index-pipeline-split task 3.2)
|
|
5
|
+
*
|
|
6
|
+
* validation エラーなしの場合の each-scope 分岐を集約する delegate と
|
|
7
|
+
* その内部 sub-helper 群。旧 index.ts 主ループ L630-L700 相当のロジックを
|
|
8
|
+
* 3 個の named sub-helper に分割し、`runEachScopeBranch` から順次呼ぶ構造に
|
|
9
|
+
* 再構成する。cognitive concentration を dispersed する目的で sub-helper
|
|
10
|
+
* 単位での独立 unit test 可能性を保つ (Req 6.1, 6.2)。
|
|
11
|
+
*
|
|
12
|
+
* 本モジュールは each-state-rewriter.ts の Phase 4b orchestration 専用に
|
|
13
|
+
* 分離されている (Req 7.3: 受け側モジュールが 500 行を超えるため別ファイルへ分散)。
|
|
14
|
+
*/
|
|
15
|
+
import type { OnCallInfo } from './call-detector';
|
|
16
|
+
import type { EachScopeOutcome, PreCheckOutcome, TransformerBaseContext } from './per-call-context';
|
|
17
|
+
/**
|
|
18
|
+
* Phase 4b per-call delegate: validation エラーなしの場合の each-scope 分岐を実行する。
|
|
19
|
+
*
|
|
20
|
+
* 3 個の private sub-helper を順次呼んで `EachScopeOutcome` を組み立てる薄い
|
|
21
|
+
* オーケストレーター (本体 ≤ 15 行)。
|
|
22
|
+
*
|
|
23
|
+
* @param base - per-invocation base context (checker / sourceFile / fallback など)
|
|
24
|
+
* @param callInfo - 対象 .on() 呼出情報
|
|
25
|
+
* @param preCheck - Phase 1 outcome (helperPathUsed / inherited each-scope を含む)
|
|
26
|
+
*/
|
|
27
|
+
export declare function runEachScopeBranch(base: TransformerBaseContext, callInfo: OnCallInfo, preCheck: PreCheckOutcome): EachScopeOutcome;
|
|
28
|
+
//# sourceMappingURL=each-scope-branch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"each-scope-branch.d.ts","sourceRoot":"","sources":["../../src/transformer/each-scope-branch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AASlD,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAmF5B;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,sBAAsB,EAC5B,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAalB"}
|