@shrkcrft/generator 0.1.0-alpha.2
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.md +15 -0
- package/dist/conflict-handler.d.ts +12 -0
- package/dist/conflict-handler.d.ts.map +1 -0
- package/dist/conflict-handler.js +25 -0
- package/dist/dry-run.d.ts +10 -0
- package/dist/dry-run.d.ts.map +1 -0
- package/dist/dry-run.js +178 -0
- package/dist/file-change.d.ts +46 -0
- package/dist/file-change.d.ts.map +1 -0
- package/dist/file-change.js +22 -0
- package/dist/folder-apply.d.ts +29 -0
- package/dist/folder-apply.d.ts.map +1 -0
- package/dist/folder-apply.js +117 -0
- package/dist/folder-safety.d.ts +12 -0
- package/dist/folder-safety.d.ts.map +1 -0
- package/dist/folder-safety.js +75 -0
- package/dist/generation-plan.d.ts +24 -0
- package/dist/generation-plan.d.ts.map +1 -0
- package/dist/generation-plan.js +1 -0
- package/dist/generation-request.d.ts +14 -0
- package/dist/generation-request.d.ts.map +1 -0
- package/dist/generation-request.js +1 -0
- package/dist/generator-engine.d.ts +12 -0
- package/dist/generator-engine.d.ts.map +1 -0
- package/dist/generator-engine.js +74 -0
- package/dist/grounding/extracted-plan.d.ts +42 -0
- package/dist/grounding/extracted-plan.d.ts.map +1 -0
- package/dist/grounding/extracted-plan.js +12 -0
- package/dist/grounding/extractor-registry.d.ts +21 -0
- package/dist/grounding/extractor-registry.d.ts.map +1 -0
- package/dist/grounding/extractor-registry.js +30 -0
- package/dist/grounding/extractor.d.ts +24 -0
- package/dist/grounding/extractor.d.ts.map +1 -0
- package/dist/grounding/extractor.js +8 -0
- package/dist/grounding/extractors/markdown-frontmatter-loose.d.ts +17 -0
- package/dist/grounding/extractors/markdown-frontmatter-loose.d.ts.map +1 -0
- package/dist/grounding/extractors/markdown-frontmatter-loose.js +160 -0
- package/dist/grounding/extractors/sharkcraft-spec-v1.d.ts +12 -0
- package/dist/grounding/extractors/sharkcraft-spec-v1.d.ts.map +1 -0
- package/dist/grounding/extractors/sharkcraft-spec-v1.js +56 -0
- package/dist/grounding/index.d.ts +6 -0
- package/dist/grounding/index.d.ts.map +1 -0
- package/dist/grounding/index.js +5 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/naming-strategy.d.ts +5 -0
- package/dist/naming-strategy.d.ts.map +1 -0
- package/dist/naming-strategy.js +28 -0
- package/dist/overwrite-strategy.d.ts +14 -0
- package/dist/overwrite-strategy.d.ts.map +1 -0
- package/dist/overwrite-strategy.js +15 -0
- package/dist/plan-signing.d.ts +37 -0
- package/dist/plan-signing.d.ts.map +1 -0
- package/dist/plan-signing.js +82 -0
- package/dist/planned-change.d.ts +167 -0
- package/dist/planned-change.d.ts.map +1 -0
- package/dist/planned-change.js +507 -0
- package/dist/saved-plan.d.ts +110 -0
- package/dist/saved-plan.d.ts.map +1 -0
- package/dist/saved-plan.js +281 -0
- package/dist/spec/index.d.ts +7 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +6 -0
- package/dist/spec/spec-derive.d.ts +15 -0
- package/dist/spec/spec-derive.d.ts.map +1 -0
- package/dist/spec/spec-derive.js +294 -0
- package/dist/spec/spec-frontmatter.d.ts +37 -0
- package/dist/spec/spec-frontmatter.d.ts.map +1 -0
- package/dist/spec/spec-frontmatter.js +497 -0
- package/dist/spec/spec-id.d.ts +30 -0
- package/dist/spec/spec-id.d.ts.map +1 -0
- package/dist/spec/spec-id.js +38 -0
- package/dist/spec/spec-io.d.ts +56 -0
- package/dist/spec/spec-io.d.ts.map +1 -0
- package/dist/spec/spec-io.js +176 -0
- package/dist/spec/spec-model.d.ts +117 -0
- package/dist/spec/spec-model.d.ts.map +1 -0
- package/dist/spec/spec-model.js +225 -0
- package/dist/spec/spec-scaffold.d.ts +32 -0
- package/dist/spec/spec-scaffold.d.ts.map +1 -0
- package/dist/spec/spec-scaffold.js +106 -0
- package/dist/synthetic-plan.d.ts +14 -0
- package/dist/synthetic-plan.d.ts.map +1 -0
- package/dist/synthetic-plan.js +123 -0
- package/package.json +54 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type AppError, type Result } from '@shrkcrft/core';
|
|
2
|
+
import type { ISavedPlan } from './saved-plan.js';
|
|
3
|
+
/** Env var that supplies the HMAC secret. */
|
|
4
|
+
export declare const PLAN_SECRET_ENV = "SHARKCRAFT_PLAN_SECRET";
|
|
5
|
+
export declare const SIGNATURE_ALGO = "sha256";
|
|
6
|
+
export interface IPlanSignature {
|
|
7
|
+
/** Algorithm marker. */
|
|
8
|
+
algo: typeof SIGNATURE_ALGO;
|
|
9
|
+
/** Hex-encoded HMAC. */
|
|
10
|
+
hmac: string;
|
|
11
|
+
/** ISO timestamp of when the plan was signed. */
|
|
12
|
+
signedAt: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Stable JSON encoding for a saved plan, excluding any existing signature.
|
|
16
|
+
* Keys are sorted recursively. Used as the input to the HMAC.
|
|
17
|
+
*/
|
|
18
|
+
export declare function canonicalizePlan(plan: ISavedPlan): string;
|
|
19
|
+
export interface SignPlanOptions {
|
|
20
|
+
/** Explicit secret. If omitted, falls back to SHARKCRAFT_PLAN_SECRET env. */
|
|
21
|
+
secret?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function signPlan(plan: ISavedPlan, options?: SignPlanOptions): Result<ISavedPlan, AppError>;
|
|
24
|
+
export interface VerifyPlanOptions {
|
|
25
|
+
secret?: string;
|
|
26
|
+
}
|
|
27
|
+
export type VerifyResult = {
|
|
28
|
+
ok: true;
|
|
29
|
+
status: 'verified';
|
|
30
|
+
} | {
|
|
31
|
+
ok: false;
|
|
32
|
+
status: 'missing-signature' | 'missing-secret' | 'invalid-signature';
|
|
33
|
+
message: string;
|
|
34
|
+
};
|
|
35
|
+
/** Pure verification: returns a discriminated status union. */
|
|
36
|
+
export declare function verifyPlan(plan: ISavedPlan, options?: VerifyPlanOptions): VerifyResult;
|
|
37
|
+
//# sourceMappingURL=plan-signing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-signing.d.ts","sourceRoot":"","sources":["../src/plan-signing.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,6CAA6C;AAC7C,eAAO,MAAM,eAAe,2BAA2B,CAAC;AACxD,eAAO,MAAM,cAAc,WAAW,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,IAAI,EAAE,OAAO,cAAc,CAAC;IAC5B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAIzD;AAwBD,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CACtB,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,eAAoB,GAC5B,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAiB9B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzG,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,GAAE,iBAAsB,GAAG,YAAY,CA4B1F"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
import { AppErrorImpl, ERROR_CODES, err, ok } from '@shrkcrft/core';
|
|
3
|
+
/** Env var that supplies the HMAC secret. */
|
|
4
|
+
export const PLAN_SECRET_ENV = 'SHARKCRAFT_PLAN_SECRET';
|
|
5
|
+
export const SIGNATURE_ALGO = 'sha256';
|
|
6
|
+
/**
|
|
7
|
+
* Stable JSON encoding for a saved plan, excluding any existing signature.
|
|
8
|
+
* Keys are sorted recursively. Used as the input to the HMAC.
|
|
9
|
+
*/
|
|
10
|
+
export function canonicalizePlan(plan) {
|
|
11
|
+
const clone = { ...plan };
|
|
12
|
+
delete clone.signature;
|
|
13
|
+
return canonicalJson(clone);
|
|
14
|
+
}
|
|
15
|
+
function canonicalJson(value) {
|
|
16
|
+
if (value === null || typeof value !== 'object')
|
|
17
|
+
return JSON.stringify(value);
|
|
18
|
+
if (Array.isArray(value)) {
|
|
19
|
+
return '[' + value.map((v) => canonicalJson(v)).join(',') + ']';
|
|
20
|
+
}
|
|
21
|
+
const keys = Object.keys(value).sort();
|
|
22
|
+
const parts = [];
|
|
23
|
+
for (const k of keys) {
|
|
24
|
+
const v = value[k];
|
|
25
|
+
if (v === undefined)
|
|
26
|
+
continue;
|
|
27
|
+
parts.push(JSON.stringify(k) + ':' + canonicalJson(v));
|
|
28
|
+
}
|
|
29
|
+
return '{' + parts.join(',') + '}';
|
|
30
|
+
}
|
|
31
|
+
function readSecret(envSecret) {
|
|
32
|
+
if (envSecret !== undefined && envSecret.length > 0)
|
|
33
|
+
return envSecret;
|
|
34
|
+
const fromEnv = process.env[PLAN_SECRET_ENV];
|
|
35
|
+
if (fromEnv && fromEnv.length > 0)
|
|
36
|
+
return fromEnv;
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
export function signPlan(plan, options = {}) {
|
|
40
|
+
const secret = readSecret(options.secret);
|
|
41
|
+
if (!secret) {
|
|
42
|
+
return err(new AppErrorImpl(ERROR_CODES.INVALID_INPUT, `Cannot sign plan: no secret. Set ${PLAN_SECRET_ENV} or pass --secret.`));
|
|
43
|
+
}
|
|
44
|
+
const canon = canonicalizePlan(plan);
|
|
45
|
+
const hmac = createHmac(SIGNATURE_ALGO, secret).update(canon).digest('hex');
|
|
46
|
+
const signed = {
|
|
47
|
+
...plan,
|
|
48
|
+
signature: { algo: SIGNATURE_ALGO, hmac, signedAt: new Date().toISOString() },
|
|
49
|
+
};
|
|
50
|
+
return ok(signed);
|
|
51
|
+
}
|
|
52
|
+
/** Pure verification: returns a discriminated status union. */
|
|
53
|
+
export function verifyPlan(plan, options = {}) {
|
|
54
|
+
if (!plan.signature) {
|
|
55
|
+
return { ok: false, status: 'missing-signature', message: 'Plan has no signature.' };
|
|
56
|
+
}
|
|
57
|
+
const secret = readSecret(options.secret);
|
|
58
|
+
if (!secret) {
|
|
59
|
+
return {
|
|
60
|
+
ok: false,
|
|
61
|
+
status: 'missing-secret',
|
|
62
|
+
message: `Cannot verify plan: no secret. Set ${PLAN_SECRET_ENV} or pass --secret.`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const canon = canonicalizePlan(plan);
|
|
66
|
+
const expected = createHmac(SIGNATURE_ALGO, secret).update(canon).digest();
|
|
67
|
+
let given;
|
|
68
|
+
try {
|
|
69
|
+
given = Buffer.from(plan.signature.hmac, 'hex');
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return { ok: false, status: 'invalid-signature', message: 'Signature is not valid hex.' };
|
|
73
|
+
}
|
|
74
|
+
if (given.length !== expected.length) {
|
|
75
|
+
return { ok: false, status: 'invalid-signature', message: 'Signature length mismatch.' };
|
|
76
|
+
}
|
|
77
|
+
const equal = timingSafeEqual(given, expected);
|
|
78
|
+
if (!equal) {
|
|
79
|
+
return { ok: false, status: 'invalid-signature', message: 'Signature does not match.' };
|
|
80
|
+
}
|
|
81
|
+
return { ok: true, status: 'verified' };
|
|
82
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Planned change model — v2.
|
|
3
|
+
*
|
|
4
|
+
* v1 templates emit CREATE-only entries via `files() → ITemplateFile[]`. The
|
|
5
|
+
* v2 model lets templates declare explicit UPDATE-style operations (append,
|
|
6
|
+
* insert-after, insert-before, replace, export) alongside CREATE entries.
|
|
7
|
+
*
|
|
8
|
+
* Each operation:
|
|
9
|
+
* - is declared by the template as a small structured intent;
|
|
10
|
+
* - is evaluated at plan time against the live file system;
|
|
11
|
+
* - resolves to a concrete `IFileChange` with precomputed final contents,
|
|
12
|
+
* a kind ("append" / "insert-after" / ... / "skip" / "conflict"),
|
|
13
|
+
* and a reason that explains what the engine decided.
|
|
14
|
+
*
|
|
15
|
+
* Hard rules preserved by this module:
|
|
16
|
+
* - No arbitrary code execution. Operations are data, not closures.
|
|
17
|
+
* - No hidden post-apply hooks. Every byte written ends up in `contents` and
|
|
18
|
+
* is shown in dry-run / plan review.
|
|
19
|
+
* - Same write path as v1: `generator-engine.generate()` writes the
|
|
20
|
+
* precomputed `contents`. Apply does not re-interpret the operation.
|
|
21
|
+
* - MCP stays read-only — this module is pure logic.
|
|
22
|
+
*/
|
|
23
|
+
import { FileChangeType, type IFileChange } from './file-change.js';
|
|
24
|
+
export type PlannedOperationKind = 'create' | 'append' | 'insert-after' | 'insert-before' | 'replace' | 'export' | 'ensure-import' | 'insert-enum-entry' | 'insert-object-entry' | 'insert-before-closing-brace' | 'insert-between-anchors';
|
|
25
|
+
interface ICreateOperation {
|
|
26
|
+
kind: 'create';
|
|
27
|
+
content: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
}
|
|
30
|
+
interface IAppendOperation {
|
|
31
|
+
kind: 'append';
|
|
32
|
+
/**
|
|
33
|
+
* The snippet to append at the end of the file. The engine adds a single
|
|
34
|
+
* `\n` separator between the existing trailing content and the snippet if
|
|
35
|
+
* the existing file does not already end with a newline.
|
|
36
|
+
*/
|
|
37
|
+
snippet: string;
|
|
38
|
+
/**
|
|
39
|
+
* Optional idempotency marker. If the existing file already contains this
|
|
40
|
+
* string anywhere, the operation is skipped (already applied).
|
|
41
|
+
*/
|
|
42
|
+
ifMissing?: string;
|
|
43
|
+
description?: string;
|
|
44
|
+
}
|
|
45
|
+
interface IInsertAfterOperation {
|
|
46
|
+
kind: 'insert-after';
|
|
47
|
+
/** Literal substring that must appear exactly once in the file. */
|
|
48
|
+
anchor: string;
|
|
49
|
+
/** The snippet to insert immediately after `anchor`. */
|
|
50
|
+
snippet: string;
|
|
51
|
+
/** Idempotency check; default = `snippet`. */
|
|
52
|
+
ifMissing?: string;
|
|
53
|
+
description?: string;
|
|
54
|
+
}
|
|
55
|
+
interface IInsertBeforeOperation {
|
|
56
|
+
kind: 'insert-before';
|
|
57
|
+
anchor: string;
|
|
58
|
+
snippet: string;
|
|
59
|
+
ifMissing?: string;
|
|
60
|
+
description?: string;
|
|
61
|
+
}
|
|
62
|
+
interface IReplaceOperation {
|
|
63
|
+
kind: 'replace';
|
|
64
|
+
/** Literal substring to find. */
|
|
65
|
+
find: string;
|
|
66
|
+
/** Replacement text. */
|
|
67
|
+
replaceWith: string;
|
|
68
|
+
/**
|
|
69
|
+
* If provided, the engine requires exactly this many matches; otherwise the
|
|
70
|
+
* default is exactly 1. Multiple matches without an explicit `expectMatches`
|
|
71
|
+
* is a conflict (ambiguous replace).
|
|
72
|
+
*/
|
|
73
|
+
expectMatches?: number;
|
|
74
|
+
description?: string;
|
|
75
|
+
}
|
|
76
|
+
interface IExportOperation {
|
|
77
|
+
kind: 'export';
|
|
78
|
+
/** The symbol/path to re-export. */
|
|
79
|
+
from: string;
|
|
80
|
+
/** Optional named symbols. When omitted, emits `export * from`. */
|
|
81
|
+
symbols?: readonly string[];
|
|
82
|
+
/** Idempotency check; default = computed export line. */
|
|
83
|
+
ifMissing?: string;
|
|
84
|
+
description?: string;
|
|
85
|
+
}
|
|
86
|
+
interface IEnsureImportOperation {
|
|
87
|
+
kind: 'ensure-import';
|
|
88
|
+
/** Module specifier, e.g. `'./events'` or `'@app/plugin-core'`. */
|
|
89
|
+
from: string;
|
|
90
|
+
/**
|
|
91
|
+
* Named symbols to ensure. The op is a NO-OP for symbols already imported
|
|
92
|
+
* from `from`. Default import (`type: 'default'`) and namespace import
|
|
93
|
+
* (`type: 'namespace'`) are also supported via dedicated fields below.
|
|
94
|
+
*/
|
|
95
|
+
symbols?: readonly string[];
|
|
96
|
+
/** Treat the import as `import type { ... }` instead of value import. */
|
|
97
|
+
typeOnly?: boolean;
|
|
98
|
+
/** Default import binding (e.g. `import Foo from 'foo'`). */
|
|
99
|
+
defaultBinding?: string;
|
|
100
|
+
/** Namespace import binding (e.g. `import * as foo from 'foo'`). */
|
|
101
|
+
namespaceBinding?: string;
|
|
102
|
+
description?: string;
|
|
103
|
+
}
|
|
104
|
+
interface IInsertEnumEntryOperation {
|
|
105
|
+
kind: 'insert-enum-entry';
|
|
106
|
+
/** Enum identifier, e.g. `PaginationEventType`. */
|
|
107
|
+
enumName: string;
|
|
108
|
+
/** Identifier of the new enum member, e.g. `ITEM_SELECTED`. */
|
|
109
|
+
entryName: string;
|
|
110
|
+
/** Literal string value to assign, e.g. `'pagination.itemSelected'`. */
|
|
111
|
+
entryValue: string;
|
|
112
|
+
description?: string;
|
|
113
|
+
}
|
|
114
|
+
interface IInsertObjectEntryOperation {
|
|
115
|
+
kind: 'insert-object-entry';
|
|
116
|
+
/** Object identifier, e.g. `FEATURE_KEYS`. */
|
|
117
|
+
objectName: string;
|
|
118
|
+
/** Key to add. */
|
|
119
|
+
entryKey: string;
|
|
120
|
+
/** Value literal (already source-formatted). */
|
|
121
|
+
entryValue: string;
|
|
122
|
+
/** When `true`, allow shorthand entries; default `false`. */
|
|
123
|
+
shorthand?: boolean;
|
|
124
|
+
description?: string;
|
|
125
|
+
}
|
|
126
|
+
interface IInsertBeforeClosingBraceOperation {
|
|
127
|
+
kind: 'insert-before-closing-brace';
|
|
128
|
+
/** Container identifier, e.g. an interface/class/enum name. */
|
|
129
|
+
containerName: string;
|
|
130
|
+
/** Snippet inserted immediately before the matching closing brace. */
|
|
131
|
+
snippet: string;
|
|
132
|
+
/** Optional idempotency marker (default = `snippet`). */
|
|
133
|
+
ifMissing?: string;
|
|
134
|
+
description?: string;
|
|
135
|
+
}
|
|
136
|
+
interface IInsertBetweenAnchorsOperation {
|
|
137
|
+
kind: 'insert-between-anchors';
|
|
138
|
+
beginAnchor: string;
|
|
139
|
+
endAnchor: string;
|
|
140
|
+
snippet: string;
|
|
141
|
+
/** Optional idempotency marker (default = `snippet`). */
|
|
142
|
+
ifMissing?: string;
|
|
143
|
+
description?: string;
|
|
144
|
+
}
|
|
145
|
+
export type IPlannedOperation = ICreateOperation | IAppendOperation | IInsertAfterOperation | IInsertBeforeOperation | IReplaceOperation | IExportOperation | IEnsureImportOperation | IInsertEnumEntryOperation | IInsertObjectEntryOperation | IInsertBeforeClosingBraceOperation | IInsertBetweenAnchorsOperation;
|
|
146
|
+
export interface IPlannedChange {
|
|
147
|
+
/** Final file path relative to project root. */
|
|
148
|
+
targetPath: string;
|
|
149
|
+
/** Operation intent. */
|
|
150
|
+
operation: IPlannedOperation;
|
|
151
|
+
}
|
|
152
|
+
export interface IEvaluateInput {
|
|
153
|
+
change: IPlannedChange;
|
|
154
|
+
absolutePath: string;
|
|
155
|
+
relativePath: string;
|
|
156
|
+
/** Contents of the existing target file, or `null` if the file is absent. */
|
|
157
|
+
existing: string | null;
|
|
158
|
+
}
|
|
159
|
+
export declare function evaluatePlannedChange(input: IEvaluateInput): IFileChange;
|
|
160
|
+
/**
|
|
161
|
+
* True if a change kind is an UPDATE-like operation (writes to an existing
|
|
162
|
+
* file via a structural mutation). CREATE/Skip/Conflict/legacy-Update are not
|
|
163
|
+
* update-like in the v2 sense.
|
|
164
|
+
*/
|
|
165
|
+
export declare function isUpdateLike(type: FileChangeType): boolean;
|
|
166
|
+
export {};
|
|
167
|
+
//# sourceMappingURL=planned-change.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planned-change.d.ts","sourceRoot":"","sources":["../src/planned-change.ts"],"names":[],"mappings":"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"}
|