@webda/content-mapper 0.0.0-stage → 4.0.0-beta.5
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 +166 -0
- package/lib/coercions.d.ts +22 -0
- package/lib/coercions.d.ts.map +1 -0
- package/lib/coercions.js +10 -0
- package/lib/coercions.js.map +1 -0
- package/lib/context.d.ts +56 -0
- package/lib/context.d.ts.map +1 -0
- package/lib/context.js +111 -0
- package/lib/context.js.map +1 -0
- package/lib/defaults.d.ts +31 -0
- package/lib/defaults.d.ts.map +1 -0
- package/lib/defaults.js +33 -0
- package/lib/defaults.js.map +1 -0
- package/lib/generators/accessors.d.ts +15 -0
- package/lib/generators/accessors.d.ts.map +1 -0
- package/lib/generators/accessors.js +567 -0
- package/lib/generators/accessors.js.map +1 -0
- package/lib/generators/behaviors.d.ts +21 -0
- package/lib/generators/behaviors.d.ts.map +1 -0
- package/lib/generators/behaviors.js +292 -0
- package/lib/generators/behaviors.js.map +1 -0
- package/lib/generators/imports.d.ts +86 -0
- package/lib/generators/imports.d.ts.map +1 -0
- package/lib/generators/imports.js +205 -0
- package/lib/generators/imports.js.map +1 -0
- package/lib/generators/loadparameters.d.ts +7 -0
- package/lib/generators/loadparameters.d.ts.map +1 -0
- package/lib/generators/loadparameters.js +175 -0
- package/lib/generators/loadparameters.js.map +1 -0
- package/lib/generators/qlvalidator.d.ts +53 -0
- package/lib/generators/qlvalidator.d.ts.map +1 -0
- package/lib/generators/qlvalidator.js +238 -0
- package/lib/generators/qlvalidator.js.map +1 -0
- package/lib/index.d.ts +53 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +36 -0
- package/lib/index.js.map +1 -0
- package/lib/module-discovery.d.ts +211 -0
- package/lib/module-discovery.d.ts.map +1 -0
- package/lib/module-discovery.js +662 -0
- package/lib/module-discovery.js.map +1 -0
- package/lib/module.d.ts +213 -0
- package/lib/module.d.ts.map +1 -0
- package/lib/module.js +1243 -0
- package/lib/module.js.map +1 -0
- package/lib/plan.d.ts +101 -0
- package/lib/plan.d.ts.map +1 -0
- package/lib/plan.js +61 -0
- package/lib/plan.js.map +1 -0
- package/lib/property-order.d.ts +37 -0
- package/lib/property-order.d.ts.map +1 -0
- package/lib/property-order.js +141 -0
- package/lib/property-order.js.map +1 -0
- package/lib/schema/action.d.ts +46 -0
- package/lib/schema/action.d.ts.map +1 -0
- package/lib/schema/action.js +190 -0
- package/lib/schema/action.js.map +1 -0
- package/lib/schema/annotations.d.ts +63 -0
- package/lib/schema/annotations.d.ts.map +1 -0
- package/lib/schema/annotations.js +116 -0
- package/lib/schema/annotations.js.map +1 -0
- package/lib/schema/converter.d.ts +363 -0
- package/lib/schema/converter.d.ts.map +1 -0
- package/lib/schema/converter.js +1377 -0
- package/lib/schema/converter.js.map +1 -0
- package/lib/schema/jsdoc.d.ts +34 -0
- package/lib/schema/jsdoc.d.ts.map +1 -0
- package/lib/schema/jsdoc.js +206 -0
- package/lib/schema/jsdoc.js.map +1 -0
- package/lib/schema/model.d.ts +27 -0
- package/lib/schema/model.d.ts.map +1 -0
- package/lib/schema/model.js +86 -0
- package/lib/schema/model.js.map +1 -0
- package/lib/schema/project.d.ts +34 -0
- package/lib/schema/project.d.ts.map +1 -0
- package/lib/schema/project.js +305 -0
- package/lib/schema/project.js.map +1 -0
- package/lib/schema/service.d.ts +62 -0
- package/lib/schema/service.d.ts.map +1 -0
- package/lib/schema/service.js +130 -0
- package/lib/schema/service.js.map +1 -0
- package/lib/schema/types.d.ts +61 -0
- package/lib/schema/types.d.ts.map +1 -0
- package/lib/schema/types.js +36 -0
- package/lib/schema/types.js.map +1 -0
- package/lib/schema/worker-cli.d.ts +3 -0
- package/lib/schema/worker-cli.d.ts.map +1 -0
- package/lib/schema/worker-cli.js +7 -0
- package/lib/schema/worker-cli.js.map +1 -0
- package/lib/schema/worker.d.ts +81 -0
- package/lib/schema/worker.d.ts.map +1 -0
- package/lib/schema/worker.js +186 -0
- package/lib/schema/worker.js.map +1 -0
- package/lib/server.d.ts +2 -0
- package/lib/server.d.ts.map +1 -0
- package/lib/server.js +133 -0
- package/lib/server.js.map +1 -0
- package/lib/session.d.ts +84 -0
- package/lib/session.d.ts.map +1 -0
- package/lib/session.js +141 -0
- package/lib/session.js.map +1 -0
- package/lib/spans.d.ts +46 -0
- package/lib/spans.d.ts.map +1 -0
- package/lib/spans.js +64 -0
- package/lib/spans.js.map +1 -0
- package/lib/twopass.d.ts +45 -0
- package/lib/twopass.d.ts.map +1 -0
- package/lib/twopass.js +87 -0
- package/lib/twopass.js.map +1 -0
- package/lib/vite.d.ts +20 -0
- package/lib/vite.d.ts.map +1 -0
- package/lib/vite.js +41 -0
- package/lib/vite.js.map +1 -0
- package/package.json +93 -3
- package/README.md +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/lib/spans.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turns the plan's offset-based {@link Edit}s into content-mapper span maps.
|
|
3
|
+
*
|
|
4
|
+
* The plan model was already the right shape for this: an edit is
|
|
5
|
+
* `[start, end) -> text`, and a span mapping is
|
|
6
|
+
* `[virtualStart, virtualLength, originalStart, originalLength, kind]`. Untouched
|
|
7
|
+
* regions between edits become `Verbatim` spans, which is what makes diagnostics,
|
|
8
|
+
* hover and rename land on the authored text unchanged.
|
|
9
|
+
*
|
|
10
|
+
* Three cases:
|
|
11
|
+
*
|
|
12
|
+
* - **gap** (no edit) — `Verbatim`, identical length. Positions are unchanged, so
|
|
13
|
+
* every existing column outside a rewritten region is exact.
|
|
14
|
+
* - **replacement** — the identifier is re-found in the generated text and mapped
|
|
15
|
+
* `Verbatim` (equal length, so it stays rename-safe); the surrounding generated
|
|
16
|
+
* text is `Atom`, which keeps diagnostics anchored on the declaration.
|
|
17
|
+
* - **pure insertion** (`start === end`) — deliberately *unmapped*. The protocol
|
|
18
|
+
* treats gaps as fully synthesised content, which is exactly right for a
|
|
19
|
+
* generated `loadParameters()`: a diagnostic inside it is reported against the
|
|
20
|
+
* generated snippet rather than being falsely attributed to authored code.
|
|
21
|
+
*/
|
|
22
|
+
import type { Edit } from "./plan.ts";
|
|
23
|
+
/** `[virtualStart, virtualLength, originalStart, originalLength, kind, features?]` */
|
|
24
|
+
export type SpanMapping = [number, number, number, number, number, number?];
|
|
25
|
+
/** Mirrors the protocol's `SpanMapKind`. */
|
|
26
|
+
export declare const SpanMapKind: {
|
|
27
|
+
/** Same length and content in both texts. */
|
|
28
|
+
readonly Verbatim: 0;
|
|
29
|
+
/** Corresponding, but different length or content. */
|
|
30
|
+
readonly Atom: 1;
|
|
31
|
+
/** Corresponding, and diagnostics display the original text. */
|
|
32
|
+
readonly Alias: 2;
|
|
33
|
+
};
|
|
34
|
+
/** Result of splicing a plan into one file. */
|
|
35
|
+
export interface MappedText {
|
|
36
|
+
text: string;
|
|
37
|
+
mappings: SpanMapping[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Apply edits and record the span map in one pass.
|
|
41
|
+
* @param original - authored file text
|
|
42
|
+
* @param edits - this file's edits, any order
|
|
43
|
+
* @returns generated text plus its span map
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildMappedText(original: string, edits: Edit[]): MappedText;
|
|
46
|
+
//# sourceMappingURL=spans.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spans.d.ts","sourceRoot":"","sources":["../src/spans.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,sFAAsF;AACtF,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5E,4CAA4C;AAC5C,eAAO,MAAM,WAAW;IACtB,6CAA6C;aAC7C,QAAQ,EAAE,CAAC;IACX,sDAAsD;aACtD,IAAI,EAAE,CAAC;IACP,gEAAgE;aAChE,KAAK,EAAE,CAAC;CACA,CAAC;AAEX,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAkD3E"}
|
package/lib/spans.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/** Mirrors the protocol's `SpanMapKind`. */
|
|
2
|
+
export const SpanMapKind = {
|
|
3
|
+
/** Same length and content in both texts. */
|
|
4
|
+
Verbatim: 0,
|
|
5
|
+
/** Corresponding, but different length or content. */
|
|
6
|
+
Atom: 1,
|
|
7
|
+
/** Corresponding, and diagnostics display the original text. */
|
|
8
|
+
Alias: 2
|
|
9
|
+
};
|
|
10
|
+
const IDENT = /[A-Za-z_$][\w$]*/;
|
|
11
|
+
/**
|
|
12
|
+
* Apply edits and record the span map in one pass.
|
|
13
|
+
* @param original - authored file text
|
|
14
|
+
* @param edits - this file's edits, any order
|
|
15
|
+
* @returns generated text plus its span map
|
|
16
|
+
*/
|
|
17
|
+
export function buildMappedText(original, edits) {
|
|
18
|
+
const sorted = [...edits].sort((a, b) => a.start - b.start || a.end - b.end);
|
|
19
|
+
const mappings = [];
|
|
20
|
+
let out = "";
|
|
21
|
+
let cursor = 0;
|
|
22
|
+
const verbatim = (oStart, len) => {
|
|
23
|
+
if (len <= 0)
|
|
24
|
+
return;
|
|
25
|
+
mappings.push([out.length, len, oStart, len, SpanMapKind.Verbatim]);
|
|
26
|
+
out += original.slice(oStart, oStart + len);
|
|
27
|
+
};
|
|
28
|
+
for (const edit of sorted) {
|
|
29
|
+
// Overlapping edits would corrupt the map; the planner reports them separately.
|
|
30
|
+
if (edit.start < cursor)
|
|
31
|
+
continue;
|
|
32
|
+
verbatim(cursor, edit.start - cursor);
|
|
33
|
+
if (edit.start === edit.end) {
|
|
34
|
+
// Synthesised: leave it unmapped so diagnostics are attributed honestly.
|
|
35
|
+
out += edit.text;
|
|
36
|
+
cursor = edit.end;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const originalSlice = original.slice(edit.start, edit.end);
|
|
40
|
+
const originalLength = edit.end - edit.start;
|
|
41
|
+
const name = IDENT.exec(originalSlice)?.[0];
|
|
42
|
+
const vName = name ? edit.text.indexOf(name) : -1;
|
|
43
|
+
const oName = name ? edit.start + originalSlice.indexOf(name) : -1;
|
|
44
|
+
if (name && vName >= 0) {
|
|
45
|
+
if (vName > 0) {
|
|
46
|
+
mappings.push([out.length, vName, edit.start, originalLength, SpanMapKind.Atom]);
|
|
47
|
+
}
|
|
48
|
+
// Equal-length verbatim span: the only kind that is edit-safe, so rename works.
|
|
49
|
+
mappings.push([out.length + vName, name.length, oName, name.length, SpanMapKind.Verbatim]);
|
|
50
|
+
const tail = edit.text.length - vName - name.length;
|
|
51
|
+
if (tail > 0) {
|
|
52
|
+
mappings.push([out.length + vName + name.length, tail, edit.start, originalLength, SpanMapKind.Atom]);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
mappings.push([out.length, edit.text.length, edit.start, originalLength, SpanMapKind.Atom]);
|
|
57
|
+
}
|
|
58
|
+
out += edit.text;
|
|
59
|
+
cursor = edit.end;
|
|
60
|
+
}
|
|
61
|
+
verbatim(cursor, original.length - cursor);
|
|
62
|
+
return { text: out, mappings };
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=spans.js.map
|
package/lib/spans.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spans.js","sourceRoot":"","sources":["../src/spans.ts"],"names":[],"mappings":"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"}
|
package/lib/twopass.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { accessorsGenerator, type AccessorOptions } from "./generators/accessors.ts";
|
|
2
|
+
import { loadParametersGenerator } from "./generators/loadparameters.ts";
|
|
3
|
+
import { type Edit, type Generator } from "./plan.ts";
|
|
4
|
+
export interface TwoPassOptions extends AccessorOptions {
|
|
5
|
+
/** Absolute tsconfig path. */
|
|
6
|
+
configFile: string;
|
|
7
|
+
/** Source root. */
|
|
8
|
+
rootDir: string;
|
|
9
|
+
/** Override the generator set. */
|
|
10
|
+
generators?: Generator[];
|
|
11
|
+
/** Emit rather than only type-check. */
|
|
12
|
+
emit?: boolean;
|
|
13
|
+
/** Module specifier providing the WebdaQL `escape` helper. */
|
|
14
|
+
qlModule?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface TwoPassResult {
|
|
17
|
+
/** Rewritten text per file, for inspection. */
|
|
18
|
+
injected: Map<string, string>;
|
|
19
|
+
/** Diagnostics from pass 2, i.e. against the generated code. */
|
|
20
|
+
diagnostics: any[];
|
|
21
|
+
/** Emitted output captured from the virtual filesystem. */
|
|
22
|
+
emitted: Map<string, string>;
|
|
23
|
+
/** Overlapping edits between generators, if any. */
|
|
24
|
+
conflicts: {
|
|
25
|
+
fileName: string;
|
|
26
|
+
a: Edit;
|
|
27
|
+
b: Edit;
|
|
28
|
+
}[];
|
|
29
|
+
timing: {
|
|
30
|
+
pass1Ms: number;
|
|
31
|
+
pass2Ms: number;
|
|
32
|
+
totalMs: number;
|
|
33
|
+
};
|
|
34
|
+
/** Which generator produced how many edits. */
|
|
35
|
+
editCounts: Record<string, number>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Run both passes.
|
|
39
|
+
* @param options - run options
|
|
40
|
+
* @returns the result of pass 2, plus the plan that produced it
|
|
41
|
+
*/
|
|
42
|
+
export declare function runTwoPass(options: TwoPassOptions): TwoPassResult;
|
|
43
|
+
export { accessorsGenerator, loadParametersGenerator };
|
|
44
|
+
export * from "./plan.ts";
|
|
45
|
+
//# sourceMappingURL=twopass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twopass.d.ts","sourceRoot":"","sources":["../src/twopass.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAyB,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE7E,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,wCAAwC;IACxC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,gEAAgE;IAChE,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,2DAA2D;IAC3D,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,oDAAoD;IACpD,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,IAAI,CAAC;QAAC,CAAC,EAAE,IAAI,CAAA;KAAE,EAAE,CAAC;IACpD,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAsDjE;AAED,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;AACvD,cAAc,WAAW,CAAC"}
|
package/lib/twopass.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-pass build.
|
|
3
|
+
*
|
|
4
|
+
* Injecting generated code through the virtual filesystem is chicken-and-egg:
|
|
5
|
+
* `fs.readFile` has to return rewritten text, but deciding what to rewrite
|
|
6
|
+
* needs a `Program` + `Checker` — which is the very thing being constructed.
|
|
7
|
+
* The scanner-based shortcut avoided this by being purely syntactic, but that
|
|
8
|
+
* cannot resolve `ManyToOne` -> `ModelLink` or `OneToMany` -> `ModelRelated`,
|
|
9
|
+
* which is the dominant case in this codebase.
|
|
10
|
+
*
|
|
11
|
+
* So:
|
|
12
|
+
*
|
|
13
|
+
* pass 1 Program over the ORIGINAL sources -> run generators -> plan
|
|
14
|
+
* pass 2 Program with fs.readFile injecting the plan -> check / emit
|
|
15
|
+
*
|
|
16
|
+
* Nothing is written to disk, and real file paths are preserved, so `nodenext`
|
|
17
|
+
* module-format resolution behaves normally.
|
|
18
|
+
*/
|
|
19
|
+
import { openSession } from "./context.js";
|
|
20
|
+
import { accessorsGenerator } from "./generators/accessors.js";
|
|
21
|
+
import { loadParametersGenerator } from "./generators/loadparameters.js";
|
|
22
|
+
import { defaultGenerators } from "./defaults.js";
|
|
23
|
+
import { applyEdits, mergePlan } from "./plan.js";
|
|
24
|
+
/**
|
|
25
|
+
* Run both passes.
|
|
26
|
+
* @param options - run options
|
|
27
|
+
* @returns the result of pass 2, plus the plan that produced it
|
|
28
|
+
*/
|
|
29
|
+
export function runTwoPass(options) {
|
|
30
|
+
const generators = options.generators ?? defaultGenerators(options);
|
|
31
|
+
// ---- Pass 1: typed analysis over the original sources ----
|
|
32
|
+
const t0 = process.hrtime.bigint();
|
|
33
|
+
const session = openSession(options.configFile, options.rootDir);
|
|
34
|
+
const originals = new Map();
|
|
35
|
+
const all = [];
|
|
36
|
+
const editCounts = {};
|
|
37
|
+
try {
|
|
38
|
+
for (const sf of session.ctx.sourceFiles)
|
|
39
|
+
originals.set(sf.fileName, sf.text);
|
|
40
|
+
for (const g of generators) {
|
|
41
|
+
const produced = g.analyze(session.ctx);
|
|
42
|
+
editCounts[g.name] = produced.reduce((s, f) => s + f.edits.length, 0);
|
|
43
|
+
all.push(...produced);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
session.dispose();
|
|
48
|
+
}
|
|
49
|
+
const { plan, conflicts } = mergePlan(all);
|
|
50
|
+
const pass1Ms = Number(process.hrtime.bigint() - t0) / 1e6;
|
|
51
|
+
// Materialise the injected text once, so pass 2's readFile is a lookup.
|
|
52
|
+
const injected = new Map();
|
|
53
|
+
for (const [fileName, edits] of plan) {
|
|
54
|
+
const original = originals.get(fileName);
|
|
55
|
+
if (original === undefined)
|
|
56
|
+
continue;
|
|
57
|
+
injected.set(fileName, applyEdits(original, edits));
|
|
58
|
+
}
|
|
59
|
+
// ---- Pass 2: compile against the injected text ----
|
|
60
|
+
const t1 = process.hrtime.bigint();
|
|
61
|
+
const emitted = new Map();
|
|
62
|
+
const session2 = openSession(options.configFile, options.rootDir, {
|
|
63
|
+
readFile: (f) => injected.get(f),
|
|
64
|
+
writeFile: (p, c) => void emitted.set(p, c)
|
|
65
|
+
});
|
|
66
|
+
let diagnostics = [];
|
|
67
|
+
try {
|
|
68
|
+
diagnostics = [...session2.ctx.program.getSemanticDiagnostics()];
|
|
69
|
+
if (options.emit && !diagnostics.length)
|
|
70
|
+
session2.ctx.program.emit();
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
session2.dispose();
|
|
74
|
+
}
|
|
75
|
+
const pass2Ms = Number(process.hrtime.bigint() - t1) / 1e6;
|
|
76
|
+
return {
|
|
77
|
+
injected,
|
|
78
|
+
diagnostics,
|
|
79
|
+
emitted,
|
|
80
|
+
conflicts,
|
|
81
|
+
editCounts,
|
|
82
|
+
timing: { pass1Ms, pass2Ms, totalMs: pass1Ms + pass2Ms }
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export { accessorsGenerator, loadParametersGenerator };
|
|
86
|
+
export * from "./plan.js";
|
|
87
|
+
//# sourceMappingURL=twopass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twopass.js","sourceRoot":"","sources":["../src/twopass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAwB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,SAAS,EAA6B,MAAM,WAAW,CAAC;AA6B7E;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,OAAuB;IAChD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEpE,6DAA6D;IAC7D,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,IAAI,CAAC;QACH,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;YAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9E,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACtE,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;IAE3D,wEAAwE;IACxE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAS;QACrC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,sDAAsD;IACtD,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE;QAChE,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,SAAS,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;KAC5D,CAAC,CAAC;IACH,IAAI,WAAW,GAAU,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACvE,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;IAE3D,OAAO;QACL,QAAQ;QACR,WAAW;QACX,OAAO;QACP,SAAS;QACT,UAAU;QACV,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE;KACzD,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;AACvD,cAAc,WAAW,CAAC"}
|
package/lib/vite.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Plugin } from "vite";
|
|
2
|
+
/** Options for {@link webdaContentMapper} */
|
|
3
|
+
export interface WebdaContentMapperOptions {
|
|
4
|
+
/** tsconfig used to build the resident program, relative to the vite root (default "tsconfig.json") */
|
|
5
|
+
tsconfig?: string;
|
|
6
|
+
/** Files to transform (default: `.ts` files outside node_modules, not `.d.ts`) */
|
|
7
|
+
include?: RegExp;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Vite/Vitest plugin applying Webda's content-mapper generators (behaviors,
|
|
11
|
+
* accessors, load parameters, WebdaQL validators) to TypeScript sources, so
|
|
12
|
+
* specs exercise the same code `webdac build` emits.
|
|
13
|
+
*
|
|
14
|
+
* Files excluded from the tsconfig (typically `*.spec.ts`) are not part of the
|
|
15
|
+
* resident program and pass through unchanged.
|
|
16
|
+
* @param options - plugin options
|
|
17
|
+
* @returns the vite plugin
|
|
18
|
+
*/
|
|
19
|
+
export declare function webdaContentMapper(options?: WebdaContentMapperOptions): Plugin;
|
|
20
|
+
//# sourceMappingURL=vite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,6CAA6C;AAC7C,MAAM,WAAW,yBAAyB;IACxC,uGAAuG;IACvG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,MAAM,CA2BlF"}
|
package/lib/vite.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { WarmSession } from "./session.js";
|
|
3
|
+
/**
|
|
4
|
+
* Vite/Vitest plugin applying Webda's content-mapper generators (behaviors,
|
|
5
|
+
* accessors, load parameters, WebdaQL validators) to TypeScript sources, so
|
|
6
|
+
* specs exercise the same code `webdac build` emits.
|
|
7
|
+
*
|
|
8
|
+
* Files excluded from the tsconfig (typically `*.spec.ts`) are not part of the
|
|
9
|
+
* resident program and pass through unchanged.
|
|
10
|
+
* @param options - plugin options
|
|
11
|
+
* @returns the vite plugin
|
|
12
|
+
*/
|
|
13
|
+
export function webdaContentMapper(options = {}) {
|
|
14
|
+
const include = options.include ?? /^(?!.*node_modules).*(?<!\.d)\.ts$/;
|
|
15
|
+
let session;
|
|
16
|
+
let root = process.cwd();
|
|
17
|
+
return {
|
|
18
|
+
name: "webda-content-mapper",
|
|
19
|
+
enforce: "pre",
|
|
20
|
+
configResolved(config) {
|
|
21
|
+
root = config.root;
|
|
22
|
+
},
|
|
23
|
+
transform(code, id) {
|
|
24
|
+
const file = id.split("?")[0];
|
|
25
|
+
if (!include.test(file)) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
session ??= new WarmSession({ configFile: resolve(root, options.tsconfig ?? "tsconfig.json"), cwd: root });
|
|
29
|
+
const outcome = session.transform(file, code);
|
|
30
|
+
if (!outcome.editCount) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return { code: outcome.text, map: null };
|
|
34
|
+
},
|
|
35
|
+
buildEnd() {
|
|
36
|
+
session?.dispose();
|
|
37
|
+
session = undefined;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=vite.js.map
|
package/lib/vite.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAU3C;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAO,GAA8B,EAAE;IACxE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,oCAAoC,CAAC;IACxE,IAAI,OAAgC,CAAC;IACrC,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,KAAK;QACd,cAAc,CAAC,MAAM;YACnB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,KAAK,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3G,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAC3C,CAAC;QACD,QAAQ;YACN,OAAO,EAAE,OAAO,EAAE,CAAC;YACnB,OAAO,GAAG,SAAS,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,96 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webda/content-mapper",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "4.0.0-beta.5",
|
|
4
|
+
"description": "Webda compile-time code generation as a TypeScript 7.1 content mapper",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"webda",
|
|
7
|
+
"typescript",
|
|
8
|
+
"content-mapper",
|
|
9
|
+
"codegen"
|
|
10
|
+
],
|
|
11
|
+
"author": "Remi Cattiau <remi@cattiau.com>",
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/loopingz/webda.io.git",
|
|
15
|
+
"directory": "packages/content-mapper"
|
|
16
|
+
},
|
|
17
|
+
"main": "lib/index.js",
|
|
18
|
+
"typings": "lib/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./lib/index.d.ts",
|
|
22
|
+
"import": "./lib/index.js",
|
|
23
|
+
"node": "./lib/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./coercions": {
|
|
26
|
+
"types": "./lib/coercions.d.ts",
|
|
27
|
+
"import": "./lib/coercions.js",
|
|
28
|
+
"require": "./lib/coercions.js",
|
|
29
|
+
"node": "./lib/coercions.js"
|
|
30
|
+
},
|
|
31
|
+
"./vite": {
|
|
32
|
+
"types": "./lib/vite.d.ts",
|
|
33
|
+
"import": "./lib/vite.js",
|
|
34
|
+
"node": "./lib/vite.js"
|
|
35
|
+
},
|
|
36
|
+
"./server": {
|
|
37
|
+
"types": "./lib/server.d.ts",
|
|
38
|
+
"import": "./lib/server.js",
|
|
39
|
+
"node": "./lib/server.js"
|
|
40
|
+
},
|
|
41
|
+
"./schema-worker": {
|
|
42
|
+
"types": "./lib/schema/worker.d.ts",
|
|
43
|
+
"import": "./lib/schema/worker.js",
|
|
44
|
+
"node": "./lib/schema/worker.js"
|
|
45
|
+
},
|
|
46
|
+
"./schema-worker-cli": {
|
|
47
|
+
"import": "./lib/schema/worker-cli.js",
|
|
48
|
+
"node": "./lib/schema/worker-cli.js"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"typescript": {
|
|
52
|
+
"contentMapper": {
|
|
53
|
+
"exec": [
|
|
54
|
+
"node",
|
|
55
|
+
"lib/server.js"
|
|
56
|
+
],
|
|
57
|
+
"compilerOptions": [
|
|
58
|
+
"module",
|
|
59
|
+
"target"
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"typescript": ">=7.1.0-dev"
|
|
65
|
+
},
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@types/node": "25.5.0",
|
|
68
|
+
"typescript": "7.1.0-dev.20260929.1",
|
|
69
|
+
"vite": "^6.0.0",
|
|
70
|
+
"vitest": "^4.1.2"
|
|
71
|
+
},
|
|
72
|
+
"files": [
|
|
73
|
+
"lib"
|
|
74
|
+
],
|
|
75
|
+
"homepage": "https://webda.io",
|
|
76
|
+
"publishConfig": {
|
|
77
|
+
"access": "public"
|
|
78
|
+
},
|
|
79
|
+
"type": "module",
|
|
80
|
+
"engines": {
|
|
81
|
+
"node": ">=22.0.0"
|
|
82
|
+
},
|
|
83
|
+
"license": "LGPL-3.0-only",
|
|
84
|
+
"scripts": {
|
|
85
|
+
"build": "tsc -p tsconfig.json",
|
|
86
|
+
"build:watch": "tsc -p tsconfig.json --watch",
|
|
87
|
+
"format": "prettier --check src/**/*",
|
|
88
|
+
"format:fix": "prettier --write src/**/*",
|
|
89
|
+
"lint": "eslint",
|
|
90
|
+
"lint:fix": "eslint --fix",
|
|
91
|
+
"pretest": "tsc -p tsconfig.json",
|
|
92
|
+
"test": "vitest run",
|
|
93
|
+
"test:watch": "vitest",
|
|
94
|
+
"test:coverage": "vitest run --coverage"
|
|
95
|
+
}
|
|
6
96
|
}
|
package/README.md
DELETED