@shivaedev/build 0.0.0 → 0.1.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/CHANGELOG.md +9 -0
- package/LICENSE +21 -0
- package/README.md +215 -1
- package/dist/BuildFailure.d.ts +9 -0
- package/dist/BuildFailure.d.ts.map +1 -0
- package/dist/BuildFailure.js +4 -0
- package/dist/BuildFailure.js.map +1 -0
- package/dist/adapters/appTestConfig.d.ts +4 -0
- package/dist/adapters/appTestConfig.d.ts.map +1 -0
- package/dist/adapters/appTestConfig.js +17 -0
- package/dist/adapters/appTestConfig.js.map +1 -0
- package/dist/adapters/appViteConfig.d.ts +26 -0
- package/dist/adapters/appViteConfig.d.ts.map +1 -0
- package/dist/adapters/appViteConfig.js +18 -0
- package/dist/adapters/appViteConfig.js.map +1 -0
- package/dist/adapters/bundleCheck.d.ts +3 -0
- package/dist/adapters/bundleCheck.d.ts.map +1 -0
- package/dist/adapters/bundleCheck.js +53 -0
- package/dist/adapters/bundleCheck.js.map +1 -0
- package/dist/adapters/copiedCode.d.ts +9 -0
- package/dist/adapters/copiedCode.d.ts.map +1 -0
- package/dist/adapters/copiedCode.js +84 -0
- package/dist/adapters/copiedCode.js.map +1 -0
- package/dist/adapters/failuresOf.d.ts +5 -0
- package/dist/adapters/failuresOf.d.ts.map +1 -0
- package/dist/adapters/failuresOf.js +29 -0
- package/dist/adapters/failuresOf.js.map +1 -0
- package/dist/adapters/isReadonlyProperty.d.ts +10 -0
- package/dist/adapters/isReadonlyProperty.d.ts.map +1 -0
- package/dist/adapters/isReadonlyProperty.js +7 -0
- package/dist/adapters/isReadonlyProperty.js.map +1 -0
- package/dist/adapters/moduleCalls.d.ts +10 -0
- package/dist/adapters/moduleCalls.d.ts.map +1 -0
- package/dist/adapters/moduleCalls.js +47 -0
- package/dist/adapters/moduleCalls.js.map +1 -0
- package/dist/adapters/moduleFacts.d.ts +4 -0
- package/dist/adapters/moduleFacts.d.ts.map +1 -0
- package/dist/adapters/moduleFacts.js +63 -0
- package/dist/adapters/moduleFacts.js.map +1 -0
- package/dist/adapters/objectForm.d.ts +8 -0
- package/dist/adapters/objectForm.d.ts.map +1 -0
- package/dist/adapters/objectForm.js +66 -0
- package/dist/adapters/objectForm.js.map +1 -0
- package/dist/adapters/operationFacts.d.ts +10 -0
- package/dist/adapters/operationFacts.d.ts.map +1 -0
- package/dist/adapters/operationFacts.js +72 -0
- package/dist/adapters/operationFacts.js.map +1 -0
- package/dist/adapters/runNode.d.ts +6 -0
- package/dist/adapters/runNode.d.ts.map +1 -0
- package/dist/adapters/runNode.js +14 -0
- package/dist/adapters/runNode.js.map +1 -0
- package/dist/adapters/typeReading.d.ts +15 -0
- package/dist/adapters/typeReading.d.ts.map +1 -0
- package/dist/adapters/typeReading.js +46 -0
- package/dist/adapters/typeReading.js.map +1 -0
- package/dist/adapters/typeScript.d.ts +15 -0
- package/dist/adapters/typeScript.d.ts.map +1 -0
- package/dist/adapters/typeScript.js +81 -0
- package/dist/adapters/typeScript.js.map +1 -0
- package/dist/adapters/unionForm.d.ts +7 -0
- package/dist/adapters/unionForm.d.ts.map +1 -0
- package/dist/adapters/unionForm.js +78 -0
- package/dist/adapters/unionForm.js.map +1 -0
- package/dist/adapters/vitePlugin.d.ts +7 -0
- package/dist/adapters/vitePlugin.d.ts.map +1 -0
- package/dist/adapters/vitePlugin.js +88 -0
- package/dist/adapters/vitePlugin.js.map +1 -0
- package/dist/adapters/vitePort.d.ts +2 -0
- package/dist/adapters/vitePort.d.ts.map +1 -0
- package/dist/adapters/vitePort.js +5 -0
- package/dist/adapters/vitePort.js.map +1 -0
- package/dist/adapters/vitest/setup.d.ts +3 -0
- package/dist/adapters/vitest/setup.d.ts.map +1 -0
- package/dist/adapters/vitest/setup.js +11 -0
- package/dist/adapters/vitest/setup.js.map +1 -0
- package/dist/adapters/wireForm.d.ts +5 -0
- package/dist/adapters/wireForm.d.ts.map +1 -0
- package/dist/adapters/wireForm.js +91 -0
- package/dist/adapters/wireForm.js.map +1 -0
- package/dist/byText.d.ts +2 -0
- package/dist/byText.d.ts.map +1 -0
- package/dist/byText.js +8 -0
- package/dist/byText.js.map +1 -0
- package/dist/cache.d.ts +4 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +19 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -0
- package/dist/code.d.ts +11 -0
- package/dist/code.d.ts.map +1 -0
- package/dist/code.js +11 -0
- package/dist/code.js.map +1 -0
- package/dist/command.d.ts +6 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/command.js +28 -0
- package/dist/command.js.map +1 -0
- package/dist/emit.d.ts +23 -0
- package/dist/emit.d.ts.map +1 -0
- package/dist/emit.js +69 -0
- package/dist/emit.js.map +1 -0
- package/dist/facts.d.ts +92 -0
- package/dist/facts.d.ts.map +1 -0
- package/dist/facts.js +3 -0
- package/dist/facts.js.map +1 -0
- package/dist/files.d.ts +4 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +15 -0
- package/dist/files.js.map +1 -0
- package/dist/formCode.d.ts +6 -0
- package/dist/formCode.d.ts.map +1 -0
- package/dist/formCode.js +46 -0
- package/dist/formCode.js.map +1 -0
- package/dist/generate.d.ts +7 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +69 -0
- package/dist/generate.js.map +1 -0
- package/dist/generateRound.d.ts +14 -0
- package/dist/generateRound.d.ts.map +1 -0
- package/dist/generateRound.js +44 -0
- package/dist/generateRound.js.map +1 -0
- package/dist/importNames.d.ts +7 -0
- package/dist/importNames.d.ts.map +1 -0
- package/dist/importNames.js +57 -0
- package/dist/importNames.js.map +1 -0
- package/dist/inputs.d.ts +15 -0
- package/dist/inputs.d.ts.map +1 -0
- package/dist/inputs.js +64 -0
- package/dist/inputs.js.map +1 -0
- package/dist/ownerOf.d.ts +7 -0
- package/dist/ownerOf.d.ts.map +1 -0
- package/dist/ownerOf.js +30 -0
- package/dist/ownerOf.js.map +1 -0
- package/dist/packageScope.d.ts +13 -0
- package/dist/packageScope.d.ts.map +1 -0
- package/dist/packageScope.js +28 -0
- package/dist/packageScope.js.map +1 -0
- package/dist/plan.d.ts +12 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +115 -0
- package/dist/plan.js.map +1 -0
- package/dist/project.d.ts +11 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +24 -0
- package/dist/project.js.map +1 -0
- package/dist/rejections.d.ts +11 -0
- package/dist/rejections.d.ts.map +1 -0
- package/dist/rejections.js +46 -0
- package/dist/rejections.js.map +1 -0
- package/dist/report.d.ts +22 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +20 -0
- package/dist/report.js.map +1 -0
- package/dist/serverCode.d.ts +20 -0
- package/dist/serverCode.d.ts.map +1 -0
- package/dist/serverCode.js +90 -0
- package/dist/serverCode.js.map +1 -0
- package/dist/settleOrphans.d.ts +5 -0
- package/dist/settleOrphans.d.ts.map +1 -0
- package/dist/settleOrphans.js +43 -0
- package/dist/settleOrphans.js.map +1 -0
- package/dist/specifiers.d.ts +4 -0
- package/dist/specifiers.d.ts.map +1 -0
- package/dist/specifiers.js +52 -0
- package/dist/specifiers.js.map +1 -0
- package/package.json +82 -5
- package/src/BuildFailure.ts +5 -0
- package/src/adapters/appTestConfig.ts +18 -0
- package/src/adapters/appViteConfig.ts +31 -0
- package/src/adapters/bundleCheck.ts +57 -0
- package/src/adapters/copiedCode.ts +103 -0
- package/src/adapters/failuresOf.ts +31 -0
- package/src/adapters/isReadonlyProperty.ts +21 -0
- package/src/adapters/moduleCalls.ts +58 -0
- package/src/adapters/moduleFacts.ts +66 -0
- package/src/adapters/objectForm.ts +74 -0
- package/src/adapters/operationFacts.ts +85 -0
- package/src/adapters/runNode.ts +15 -0
- package/src/adapters/typeReading.ts +63 -0
- package/src/adapters/typeScript.ts +101 -0
- package/src/adapters/unionForm.ts +88 -0
- package/src/adapters/vitePlugin.ts +103 -0
- package/src/adapters/vitePort.ts +5 -0
- package/src/adapters/vitest/setup.ts +12 -0
- package/src/adapters/wireForm.ts +98 -0
- package/src/byText.ts +7 -0
- package/src/cache.ts +28 -0
- package/src/cli.ts +16 -0
- package/src/code.ts +23 -0
- package/src/command.ts +42 -0
- package/src/emit.ts +117 -0
- package/src/facts.ts +70 -0
- package/src/files.ts +19 -0
- package/src/formCode.ts +59 -0
- package/src/generate.ts +86 -0
- package/src/generateRound.ts +60 -0
- package/src/importNames.ts +61 -0
- package/src/inputs.ts +82 -0
- package/src/ownerOf.ts +40 -0
- package/src/packageScope.ts +35 -0
- package/src/plan.ts +138 -0
- package/src/project.ts +30 -0
- package/src/rejections.ts +57 -0
- package/src/report.ts +39 -0
- package/src/serverCode.ts +139 -0
- package/src/settleOrphans.ts +58 -0
- package/src/specifiers.ts +55 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { declaredIn, literalOf } from "#adapters/typeReading.ts";
|
|
3
|
+
import { byText } from "#byText.ts";
|
|
4
|
+
function discriminant(reading, members) {
|
|
5
|
+
const [first] = members;
|
|
6
|
+
const candidates = first === undefined ? [] : reading.checker.getPropertiesOfType(first).map((property) => property.name);
|
|
7
|
+
return candidates.sort().find((name) => {
|
|
8
|
+
const values = members.map((member) => {
|
|
9
|
+
const property = member.getProperty(name);
|
|
10
|
+
return property === undefined || property.flags & ts.SymbolFlags.Optional
|
|
11
|
+
? undefined
|
|
12
|
+
: literalOf(reading.checker, reading.checker.getTypeOfSymbol(property));
|
|
13
|
+
});
|
|
14
|
+
return values.every((value) => value !== undefined) && new Set(values).size === values.length;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function byValue(left, right) {
|
|
18
|
+
return byText(String(left), String(right));
|
|
19
|
+
}
|
|
20
|
+
function discriminated(reading, members, tag, path, read) {
|
|
21
|
+
function tagOf(member) {
|
|
22
|
+
const property = member.getProperty(tag);
|
|
23
|
+
return (property === undefined ? undefined : literalOf(reading.checker, reading.checker.getTypeOfSymbol(property))) ?? "";
|
|
24
|
+
}
|
|
25
|
+
const forms = [...members]
|
|
26
|
+
.sort((left, right) => byValue(tagOf(left), tagOf(right)))
|
|
27
|
+
.map((member) => read(member, `${path}<${tag}: ${tagOf(member)}>`));
|
|
28
|
+
return forms.every((form) => form !== undefined) ? { form: "union", members: forms } : undefined;
|
|
29
|
+
}
|
|
30
|
+
function optionValue(reading, members) {
|
|
31
|
+
const some = members.find((member) => member.getSymbol()?.name === "Some" && declaredIn(member, "Option"));
|
|
32
|
+
const none = members.find((member) => member.getSymbol()?.name === "None" && declaredIn(member, "Option"));
|
|
33
|
+
const value = some?.getProperty("value");
|
|
34
|
+
return none === undefined || value === undefined ? undefined : reading.checker.getTypeOfSymbol(value);
|
|
35
|
+
}
|
|
36
|
+
function withoutNull(reading, type, all, path, read) {
|
|
37
|
+
const members = all.filter((member) => !(member.flags & ts.TypeFlags.Null));
|
|
38
|
+
const [only] = members;
|
|
39
|
+
if (members.length === 1 && only !== undefined && only.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void)) {
|
|
40
|
+
return reading.refuse(type, path, "return either null or undefined, since the wire carries both as one");
|
|
41
|
+
}
|
|
42
|
+
const booleans = members.filter((member) => member.flags & ts.TypeFlags.BooleanLiteral);
|
|
43
|
+
const optionInner = optionValue(reading, members);
|
|
44
|
+
if (optionInner !== undefined && members.length === 2) {
|
|
45
|
+
const inner = read(optionInner, `${path}<Some>`);
|
|
46
|
+
return inner === undefined ? undefined : { form: "option", inner };
|
|
47
|
+
}
|
|
48
|
+
if (booleans.length === 2 && members.length === 2) {
|
|
49
|
+
return { form: "primitive", primitive: "Boolean" };
|
|
50
|
+
}
|
|
51
|
+
if (members.length === 1 && only !== undefined) {
|
|
52
|
+
return read(only, path);
|
|
53
|
+
}
|
|
54
|
+
if (members.some((member) => member.flags & ts.TypeFlags.Undefined)) {
|
|
55
|
+
return reading.refuse(type, path, "return null instead of undefined, or make the property optional");
|
|
56
|
+
}
|
|
57
|
+
const values = members.map((member) => literalOf(reading.checker, member));
|
|
58
|
+
if (values.every((value) => value !== undefined)) {
|
|
59
|
+
return { form: "literals", values: values.sort(byValue) };
|
|
60
|
+
}
|
|
61
|
+
const objects = members.every((member) => member.flags & ts.TypeFlags.Object && !reading.checker.isArrayType(member) && !reading.checker.isTupleType(member));
|
|
62
|
+
const tag = objects ? discriminant(reading, members) : undefined;
|
|
63
|
+
if (tag !== undefined) {
|
|
64
|
+
return discriminated(reading, members, tag, path, read);
|
|
65
|
+
}
|
|
66
|
+
return reading.refuse(type, path, "return string, number or boolean literals, or objects told apart by one literal field such as _tag");
|
|
67
|
+
}
|
|
68
|
+
// The members are the union's own, or an optional property's without the undefined its optionality adds.
|
|
69
|
+
export function unionForm(reading, type, members, path, read) {
|
|
70
|
+
if (type.aliasSymbol?.name === "Option" && declaredIn(type, "Option") && type.aliasTypeArguments?.[0] !== undefined) {
|
|
71
|
+
const inner = read(type.aliasTypeArguments[0], `${path}<Some>`);
|
|
72
|
+
return inner === undefined ? undefined : { form: "option", inner };
|
|
73
|
+
}
|
|
74
|
+
const inner = withoutNull(reading, type, members, path, read);
|
|
75
|
+
const nullable = members.some((member) => member.flags & ts.TypeFlags.Null);
|
|
76
|
+
return inner === undefined || !nullable ? inner : { form: "nullOr", inner };
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=unionForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unionForm.js","sourceRoot":"","sources":["../../src/adapters/unionForm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Plugin } from "vite";
|
|
2
|
+
export interface BuildPluginOptions {
|
|
3
|
+
readonly bundleCheck?: boolean;
|
|
4
|
+
readonly serverOnly?: readonly string[];
|
|
5
|
+
}
|
|
6
|
+
export declare function buildPlugin({ bundleCheck: checked, serverOnly }?: BuildPluginOptions): Plugin[];
|
|
7
|
+
//# sourceMappingURL=vitePlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitePlugin.d.ts","sourceRoot":"","sources":["../../src/adapters/vitePlugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsC,MAAM,EAAyC,MAAM,MAAM,CAAC;AAK9G,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AA2FD,wBAAgB,WAAW,CAAC,EAAE,WAAW,EAAE,OAAc,EAAE,UAAe,EAAE,GAAE,kBAAuB,GAAG,MAAM,EAAE,CAE/G"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Option } from "effect";
|
|
2
|
+
import { bundleCheck } from "#adapters/bundleCheck.ts";
|
|
3
|
+
import { runNode } from "#adapters/runNode.ts";
|
|
4
|
+
import { watchedGeneration } from "#generateRound.ts";
|
|
5
|
+
function tellTheBrowser(environment, devServer, refusal, file) {
|
|
6
|
+
if (Option.isSome(refusal)) {
|
|
7
|
+
devServer.config.logger.error(refusal.value, { timestamp: true });
|
|
8
|
+
environment.hot.send({ err: { message: refusal.value, plugin: "shivaedev:build", stack: "" }, type: "error" });
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
environment.hot.send({ path: "*", triggeredBy: file, type: "full-reload" });
|
|
12
|
+
}
|
|
13
|
+
function generateFiles() {
|
|
14
|
+
let config;
|
|
15
|
+
let server;
|
|
16
|
+
let generation;
|
|
17
|
+
let started;
|
|
18
|
+
let outputs = new Set();
|
|
19
|
+
// One change reaches hotUpdate once per environment; they share one run.
|
|
20
|
+
const shared = new Map();
|
|
21
|
+
function remember(round) {
|
|
22
|
+
outputs = new Set([...outputs, ...round.outputs]);
|
|
23
|
+
if (server !== undefined) {
|
|
24
|
+
const root = server.config.root;
|
|
25
|
+
server.watcher.add(round.inputs.filter((file) => !file.startsWith(root)));
|
|
26
|
+
}
|
|
27
|
+
return round;
|
|
28
|
+
}
|
|
29
|
+
function sharedRound(changed, file, timestamp, environments) {
|
|
30
|
+
const key = `${timestamp}\u0000${file}`;
|
|
31
|
+
const entry = shared.get(key) ?? { round: runNode(changed(file)), seenBy: 0 };
|
|
32
|
+
entry.seenBy += 1;
|
|
33
|
+
shared.set(key, entry);
|
|
34
|
+
if (entry.seenBy === environments) {
|
|
35
|
+
shared.delete(key);
|
|
36
|
+
}
|
|
37
|
+
return entry.round;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
async buildStart() {
|
|
41
|
+
generation ??= runNode(watchedGeneration(config?.root ?? "."));
|
|
42
|
+
const { run } = await generation;
|
|
43
|
+
started ??= runNode(run);
|
|
44
|
+
const round = remember(await started);
|
|
45
|
+
if (Option.isSome(round.refusal)) {
|
|
46
|
+
this.error(round.refusal.value);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
configResolved(resolved) {
|
|
50
|
+
config = resolved;
|
|
51
|
+
},
|
|
52
|
+
configureServer(devServer) {
|
|
53
|
+
server = devServer;
|
|
54
|
+
},
|
|
55
|
+
enforce: "pre",
|
|
56
|
+
async hotUpdate({ file, modules, server: devServer, timestamp }) {
|
|
57
|
+
// A run hands Vite the modules of each file it rewrites and reloads the page when it creates one, since a page may have failed
|
|
58
|
+
// to resolve it, so the watcher's own event for that write would reload twice.
|
|
59
|
+
if (outputs.has(file)) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
if (generation === undefined) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const known = outputs;
|
|
66
|
+
const { changed } = await generation;
|
|
67
|
+
const round = Option.map(await sharedRound(changed, file, timestamp, Object.keys(devServer.environments).length), remember);
|
|
68
|
+
if (Option.isNone(round)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (Option.isSome(round.value.refusal) || round.value.changed.some((output) => !known.has(output))) {
|
|
72
|
+
if (this.environment.config.consumer === "client") {
|
|
73
|
+
tellTheBrowser(this.environment, devServer, round.value.refusal, file);
|
|
74
|
+
}
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
const regenerated = round.value.changed.flatMap((output) => [
|
|
78
|
+
...(this.environment.moduleGraph.getModulesByFile(output) ?? []),
|
|
79
|
+
]);
|
|
80
|
+
return [...modules, ...regenerated];
|
|
81
|
+
},
|
|
82
|
+
name: "shivaedev:build-generate",
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export function buildPlugin({ bundleCheck: checked = true, serverOnly = [] } = {}) {
|
|
86
|
+
return checked ? [generateFiles(), bundleCheck(serverOnly)] : [generateFiles()];
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=vitePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitePlugin.js","sourceRoot":"","sources":["../../src/adapters/vitePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAA8C,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAclG,SAAS,cAAc,CAAC,WAA4C,EAAE,SAAwB,EAAE,OAA8B,EAAE,IAAY;IAC3I,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/G,OAAO;IACR,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,aAAa;IACrB,IAAI,MAAkC,CAAC;IACvC,IAAI,MAAiC,CAAC;IACtC,IAAI,UAAkD,CAAC;IACvD,IAAI,OAA2C,CAAC;IAChD,IAAI,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,yEAAyE;IACzE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,SAAS,QAAQ,CAAC,KAAoB;QACrC,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAClD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,SAAS,WAAW,CAAC,OAAqC,EAAE,IAAY,EAAE,SAAiB,EAAE,YAAoB;QAChH,MAAM,GAAG,GAAG,GAAG,SAAS,SAAS,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC9E,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvB,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,OAAO;QACN,KAAK,CAAC,UAAU;YACf,UAAU,KAAK,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;YAC/D,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,UAAU,CAAC;YACjC,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,OAAO,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACF,CAAC;QACD,cAAc,CAAC,QAAQ;YACtB,MAAM,GAAG,QAAQ,CAAC;QACnB,CAAC;QACD,eAAe,CAAC,SAAS;YACxB,MAAM,GAAG,SAAS,CAAC;QACpB,CAAC;QACD,OAAO,EAAE,KAAK;QACd,KAAK,CAAC,SAAS,CAAyB,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;YACtF,+HAA+H;YAC/H,+EAA+E;YAC/E,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,CAAC;YACX,CAAC;YACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC9B,OAAO;YACR,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC;YACtB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC5H,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO;YACR,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACpG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACnD,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACxE,CAAC;gBACD,OAAO,EAAE,CAAC;YACX,CAAC;YACD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAA2B,EAAE,CAAC;gBACpF,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;aAChE,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,WAAW,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,EAAE,0BAA0B;KAChC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,GAAuB,EAAE;IACpG,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitePort.d.ts","sourceRoot":"","sources":["../../src/adapters/vitePort.ts"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitePort.js","sourceRoot":"","sources":["../../src/adapters/vitePort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExD,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,QAAgB;IACtD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC5G,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/adapters/vitest/setup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,wBAAsB,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Option } from "effect";
|
|
2
|
+
import { runNode } from "#adapters/runNode.ts";
|
|
3
|
+
import { generateRound } from "#generateRound.ts";
|
|
4
|
+
// A Vitest global setup: every module's files are written before the first test file loads, and a refusal stops the run.
|
|
5
|
+
export async function setup(project) {
|
|
6
|
+
const round = await runNode(generateRound(project.config.root));
|
|
7
|
+
if (Option.isSome(round.refusal)) {
|
|
8
|
+
throw new Error(round.refusal.value);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/adapters/vitest/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,yHAAyH;AACzH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAoB;IAC/C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { type TypeReading } from "#adapters/typeReading.ts";
|
|
3
|
+
import type { WireForm } from "#facts.ts";
|
|
4
|
+
export declare function wireForm(reading: TypeReading, type: ts.Type, path: string, seen?: ReadonlySet<ts.Type>): WireForm | undefined;
|
|
5
|
+
//# sourceMappingURL=wireForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireForm.d.ts","sourceRoot":"","sources":["../../src/adapters/wireForm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAqD,KAAK,WAAW,EAAiB,MAAM,0BAA0B,CAAC;AAE9H,OAAO,KAAK,EAAa,QAAQ,EAAE,MAAM,WAAW,CAAC;AAkErD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAW,CAAC,EAAE,CAAC,IAAI,CAAa,GAAG,QAAQ,GAAG,SAAS,CA2BxI"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { classForm, objectForm } from "#adapters/objectForm.ts";
|
|
3
|
+
import { declaredIn, isLibraryType, isReference, literalOf, typeArguments } from "#adapters/typeReading.ts";
|
|
4
|
+
import { unionForm } from "#adapters/unionForm.ts";
|
|
5
|
+
const PRIMITIVES = [
|
|
6
|
+
[ts.TypeFlags.String, "String"],
|
|
7
|
+
[ts.TypeFlags.Number, "Number"],
|
|
8
|
+
[ts.TypeFlags.Boolean, "Boolean"],
|
|
9
|
+
[ts.TypeFlags.BigInt, "BigInt"],
|
|
10
|
+
[ts.TypeFlags.Null, "Null"],
|
|
11
|
+
[ts.TypeFlags.Void, "Void"],
|
|
12
|
+
[ts.TypeFlags.Undefined, "Undefined"],
|
|
13
|
+
];
|
|
14
|
+
const UNMAPPED = [
|
|
15
|
+
[ts.TypeFlags.Any, "decode the value with a schema, or give it a type"],
|
|
16
|
+
[ts.TypeFlags.Unknown, "decode the value with a schema, or give it a type"],
|
|
17
|
+
[ts.TypeFlags.Never, "return a value, or nothing"],
|
|
18
|
+
[ts.TypeFlags.EnumLike, "return string or number literals instead of an enum"],
|
|
19
|
+
[ts.TypeFlags.TemplateLiteral | ts.TypeFlags.StringMapping, "return string"],
|
|
20
|
+
[ts.TypeFlags.ESSymbolLike, "return a string instead of a symbol"],
|
|
21
|
+
[ts.TypeFlags.TypeParameter | ts.TypeFlags.Index | ts.TypeFlags.IndexedAccess | ts.TypeFlags.Conditional, "give run's return a concrete type"],
|
|
22
|
+
[ts.TypeFlags.NonPrimitive, "return a type with known properties"],
|
|
23
|
+
];
|
|
24
|
+
function arrayForm(reading, type, path, seen) {
|
|
25
|
+
const [element] = typeArguments(reading.checker, type);
|
|
26
|
+
const item = element === undefined ? undefined : wireForm(reading, element, `${path}[number]`, seen);
|
|
27
|
+
return item === undefined ? undefined : { form: "array", item, mutable: type.getSymbol()?.name === "Array" };
|
|
28
|
+
}
|
|
29
|
+
function isTuple(target) {
|
|
30
|
+
return "elementFlags" in target;
|
|
31
|
+
}
|
|
32
|
+
function tupleForm(reading, type, path, seen) {
|
|
33
|
+
const target = type.target;
|
|
34
|
+
if (!isTuple(target) || target.elementFlags.some((flags) => flags !== ts.ElementFlags.Required)) {
|
|
35
|
+
return reading.refuse(type, path, "use an array, or a tuple of required elements");
|
|
36
|
+
}
|
|
37
|
+
const elements = reading.checker
|
|
38
|
+
.getTypeArguments(type)
|
|
39
|
+
.slice(0, target.elementFlags.length)
|
|
40
|
+
.map((element, index) => wireForm(reading, element, `${path}[${index}]`, seen));
|
|
41
|
+
return elements.every((element) => element !== undefined) ? { elements, form: "tuple", mutable: !target.readonly } : undefined;
|
|
42
|
+
}
|
|
43
|
+
function objectTypeForm(reading, type, path, seen) {
|
|
44
|
+
if (isLibraryType(reading, type, "Date")) {
|
|
45
|
+
return { form: "primitive", primitive: "Date" };
|
|
46
|
+
}
|
|
47
|
+
if (declaredIn(type, "DateTime") && type.getSymbol()?.name === "Utc") {
|
|
48
|
+
return { form: "primitive", primitive: "DateTimeUtc" };
|
|
49
|
+
}
|
|
50
|
+
if (reading.checker.isTupleType(type) && isReference(type)) {
|
|
51
|
+
return tupleForm(reading, type, path, seen);
|
|
52
|
+
}
|
|
53
|
+
if (reading.checker.isArrayType(type)) {
|
|
54
|
+
return arrayForm(reading, type, path, seen);
|
|
55
|
+
}
|
|
56
|
+
const symbol = type.getSymbol();
|
|
57
|
+
if (symbol !== undefined && symbol.flags & ts.SymbolFlags.Class) {
|
|
58
|
+
return classForm(reading, type, symbol, path);
|
|
59
|
+
}
|
|
60
|
+
return objectForm(reading, type, path, (property, propertyPath) => wireForm(reading, property, propertyPath, seen));
|
|
61
|
+
}
|
|
62
|
+
// The schema whose Type is exactly this type, or undefined after refusing it: the wire never carries a looser form.
|
|
63
|
+
export function wireForm(reading, type, path, seen = new Set()) {
|
|
64
|
+
if (seen.has(type)) {
|
|
65
|
+
return reading.refuse(type, path, "return a type that does not contain itself");
|
|
66
|
+
}
|
|
67
|
+
const within = new Set([...seen, type]);
|
|
68
|
+
const primitive = PRIMITIVES.find(([flags]) => type.flags & flags);
|
|
69
|
+
if (primitive !== undefined) {
|
|
70
|
+
return { form: "primitive", primitive: primitive[1] };
|
|
71
|
+
}
|
|
72
|
+
const unmapped = UNMAPPED.find(([flags]) => type.flags & flags);
|
|
73
|
+
if (unmapped !== undefined) {
|
|
74
|
+
return reading.refuse(type, path, unmapped[1]);
|
|
75
|
+
}
|
|
76
|
+
const literal = literalOf(reading.checker, type);
|
|
77
|
+
if (literal !== undefined) {
|
|
78
|
+
return { form: "literals", values: [literal] };
|
|
79
|
+
}
|
|
80
|
+
if (type.isUnion()) {
|
|
81
|
+
return unionForm(reading, type, type.types, path, (member, memberPath) => wireForm(reading, member, memberPath, within));
|
|
82
|
+
}
|
|
83
|
+
if (type.isIntersection() && type.types.some((member) => !(member.flags & ts.TypeFlags.Object))) {
|
|
84
|
+
return reading.refuse(type, path, "return the unbranded type, or wrap the value in an exported Schema class");
|
|
85
|
+
}
|
|
86
|
+
if (type.flags & ts.TypeFlags.Object || type.isIntersection()) {
|
|
87
|
+
return objectTypeForm(reading, type, path, within);
|
|
88
|
+
}
|
|
89
|
+
return reading.refuse(type, path, "return plain data");
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=wireForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireForm.js","sourceRoot":"","sources":["../../src/adapters/wireForm.ts"],"names":[],"mappings":"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"}
|
package/dist/byText.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"byText.d.ts","sourceRoot":"","sources":["../src/byText.ts"],"names":[],"mappings":"AACA,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK1D"}
|
package/dist/byText.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"byText.js","sourceRoot":"","sources":["../src/byText.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,KAAa;IACjD,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,CAAC,CAAC;IACX,CAAC;IACD,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/cache.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Effect, Option, Path, Schema } from "effect";
|
|
2
|
+
export declare const cachedOutput: (root: string, module: string, key: string) => Effect.Effect<Option.Option<string>, import("effect/PlatformError").PlatformError, import("effect/FileSystem").FileSystem | Path.Path>;
|
|
3
|
+
export declare const recordOutput: (root: string, module: string, key: string, content: string) => Effect.Effect<void, import("effect/PlatformError").PlatformError | Schema.SchemaError, import("effect/FileSystem").FileSystem | Path.Path>;
|
|
4
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAiBtD,eAAO,MAAM,YAAY,uLAMvB,CAAC;AAEH,eAAO,MAAM,YAAY,4MAEvB,CAAC"}
|
package/dist/cache.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Effect, Option, Path, Schema } from "effect";
|
|
2
|
+
import { readIfPresent, writeAtomically } from "#files.ts";
|
|
3
|
+
const CacheRecord = Schema.Struct({ content: Schema.String, key: Schema.String });
|
|
4
|
+
const CacheJson = Schema.fromJsonString(CacheRecord);
|
|
5
|
+
const decodeRecord = Schema.decodeUnknownOption(CacheJson);
|
|
6
|
+
const encodeRecord = Schema.encodeEffect(CacheJson);
|
|
7
|
+
const recordPath = Effect.fn("Build.recordPath")(function* (root, module) {
|
|
8
|
+
const path = yield* Path.Path;
|
|
9
|
+
return path.join(root, "node_modules", ".cache", "@shivaedev", "build", `${path.relative(root, module)}.json`);
|
|
10
|
+
});
|
|
11
|
+
// The output of the last run whose inputs had this key; another key, or an unreadable record, means the module must be derived.
|
|
12
|
+
export const cachedOutput = Effect.fn("Build.cachedOutput")(function* (root, module, key) {
|
|
13
|
+
const text = yield* readIfPresent(yield* recordPath(root, module));
|
|
14
|
+
return Option.filter(Option.flatMap(text, (json) => decodeRecord(json)), (record) => record.key === key).pipe(Option.map((record) => record.content));
|
|
15
|
+
});
|
|
16
|
+
export const recordOutput = Effect.fn("Build.recordOutput")(function* (root, module, key, content) {
|
|
17
|
+
yield* writeAtomically(yield* recordPath(root, module), yield* encodeRecord({ content, key }));
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE3D,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAElF,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAErD,MAAM,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAE3D,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAEpD,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAY,EAAE,MAAc;IACvF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAChH,CAAC,CAAC,CAAC;AAEH,gIAAgI;AAChI,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAY,EAAE,MAAc,EAAE,GAAW;IAC/G,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,MAAM,CACnB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAClD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAC9B,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAY,EAAE,MAAc,EAAE,GAAW,EAAE,OAAe;IAChI,KAAK,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAChG,CAAC,CAAC,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import * as NodeCrypto from "@effect/platform-node/NodeCrypto";
|
|
3
|
+
import * as NodeRuntime from "@effect/platform-node/NodeRuntime";
|
|
4
|
+
import * as NodeServices from "@effect/platform-node/NodeServices";
|
|
5
|
+
import { Cause, Console, Effect } from "effect";
|
|
6
|
+
import { CliError, Command } from "effect/cli";
|
|
7
|
+
import { buildCommand } from "#command.ts";
|
|
8
|
+
import packageInfo from "#package.json" with { type: "json" };
|
|
9
|
+
const main = Command.run(buildCommand, { version: packageInfo.version }).pipe(Effect.tapError((error) => (CliError.isCliError(error) || error._tag === "GenerateFailed" ? Effect.void : Console.error(error.message))), Effect.tapCause((cause) => (Cause.hasDies(cause) ? Console.error(Cause.pretty(cause)) : Effect.void)), Effect.provide([NodeServices.layer, NodeCrypto.layer]));
|
|
10
|
+
NodeRuntime.runMain(main, { disableErrorReporting: true });
|
|
11
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,UAAU,MAAM,kCAAkC,CAAC;AAC/D,OAAO,KAAK,WAAW,MAAM,mCAAmC,CAAC;AACjE,OAAO,KAAK,YAAY,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,WAAW,MAAM,eAAe,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE9D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAC5E,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EACxI,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EACrG,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CACtD,CAAC;AAEF,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC"}
|
package/dist/code.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ImportRef {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly preferred: string;
|
|
4
|
+
readonly specifier: string;
|
|
5
|
+
readonly typeOnly: boolean;
|
|
6
|
+
}
|
|
7
|
+
export type Code = readonly (string | ImportRef)[];
|
|
8
|
+
export declare const SCHEMA: ImportRef;
|
|
9
|
+
export declare function code(...parts: readonly (string | ImportRef | Code)[]): Code;
|
|
10
|
+
export declare function joined(items: readonly Code[], separator: string): Code;
|
|
11
|
+
//# sourceMappingURL=code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../src/code.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;AAEnD,eAAO,MAAM,MAAM,EAAE,SAAyF,CAAC;AAM/G,wBAAgB,IAAI,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAE3E;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAEtE"}
|
package/dist/code.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const SCHEMA = { name: "Schema", preferred: "Schema", specifier: "effect", typeOnly: false };
|
|
2
|
+
function isCode(part) {
|
|
3
|
+
return Array.isArray(part);
|
|
4
|
+
}
|
|
5
|
+
export function code(...parts) {
|
|
6
|
+
return parts.flatMap((part) => (isCode(part) ? part : [part]));
|
|
7
|
+
}
|
|
8
|
+
export function joined(items, separator) {
|
|
9
|
+
return items.flatMap((item, index) => (index === 0 ? item : [separator, ...item]));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=code.js.map
|
package/dist/code.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.js","sourceRoot":"","sources":["../src/code.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,MAAM,GAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAE/G,SAAS,MAAM,CAAC,IAA+B;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAG,KAA6C;IACpE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAsB,EAAE,SAAiB;IAC/D,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpF,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Command } from "effect/cli";
|
|
2
|
+
export declare const generateCommand: Command.Command<"generate", {
|
|
3
|
+
readonly check: boolean;
|
|
4
|
+
}, {}, import("effect/PlatformError").BadArgument | import("./BuildFailure.ts").BuildFailure | import("#report.ts").GenerateFailed | import("@shivaedev/heavy-lock/error.ts").HeavyLockError | import("effect/PlatformError").PlatformError | import("effect/Schema").SchemaError, import("effect/crypto/Digest").Digest | import("@shivaedev/heavy-lock/acquire.ts").HeavyLockServices>;
|
|
5
|
+
export declare const buildCommand: Command.Command<"shivaedev-build", {}, {}, import("effect/PlatformError").BadArgument | import("./BuildFailure.ts").BuildFailure | import("#report.ts").GenerateFailed | import("@shivaedev/heavy-lock/error.ts").HeavyLockError | import("effect/PlatformError").PlatformError | import("effect/Schema").SchemaError, import("effect/crypto/Digest").Digest | import("@shivaedev/heavy-lock/acquire.ts").HeavyLockServices>;
|
|
6
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAQ,MAAM,YAAY,CAAC;AAwB3C,eAAO,MAAM,eAAe;;wXAc3B,CAAC;AAEF,eAAO,MAAM,YAAY,8ZAAmF,CAAC"}
|
package/dist/command.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Console, Effect, Path } from "effect";
|
|
2
|
+
import { Command, Flag } from "effect/cli";
|
|
3
|
+
import { generate } from "#generate.ts";
|
|
4
|
+
const WORDS = {
|
|
5
|
+
current: "current",
|
|
6
|
+
missing: "missing",
|
|
7
|
+
orphaned: "orphaned, its module is gone",
|
|
8
|
+
refused: "refused",
|
|
9
|
+
removed: "removed, its module is gone",
|
|
10
|
+
stale: "stale",
|
|
11
|
+
unchanged: "unchanged, from the cache",
|
|
12
|
+
written: "written",
|
|
13
|
+
};
|
|
14
|
+
const printReport = Effect.fn("Build.printReport")(function* (report) {
|
|
15
|
+
for (const { output, status } of report.modules) {
|
|
16
|
+
yield* Console.log(`${output}: ${WORDS[status]}`);
|
|
17
|
+
}
|
|
18
|
+
if (report.modules.length === 0) {
|
|
19
|
+
yield* Console.log("No file of the project calls defineModule.");
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
export const generateCommand = Command.make("generate", { check: Flag.Boolean("check").pipe(Flag.withDefault(false)) }, ({ check }) => Effect.gen(function* () {
|
|
23
|
+
const path = yield* Path.Path;
|
|
24
|
+
const report = yield* generate(path.resolve(), { check }).pipe(Effect.tapErrorTag("GenerateFailed", (failed) => printReport(failed.report).pipe(Effect.andThen(Effect.forEach(failed.problems, (problem) => Console.error(problem))))));
|
|
25
|
+
yield* printReport(report);
|
|
26
|
+
})).pipe(Command.withDescription("Write src/generated/<module>.ts for every defineModule call of the project in the current directory and remove each generated file whose module is gone; --check writes nothing and fails on a missing, stale or orphaned file"));
|
|
27
|
+
export const buildCommand = Command.make("shivaedev-build").pipe(Command.withSubcommands([generateCommand]));
|
|
28
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGxC,MAAM,KAAK,GAA2C;IACrD,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,8BAA8B;IACxC,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,6BAA6B;IACtC,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,2BAA2B;IACtC,OAAO,EAAE,SAAS;CAClB,CAAC;AAEF,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAsB;IACnF,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjD,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAClE,CAAC;AACF,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CACrI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAC7D,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE,CAC/C,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACrH,CACD,CAAC;IACF,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC,CAAC,CACF,CAAC,IAAI,CACL,OAAO,CAAC,eAAe,CACtB,gOAAgO,CAChO,CACD,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/emit.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Code, type ImportRef } from "#code.ts";
|
|
2
|
+
export interface PlannedOperation {
|
|
3
|
+
readonly kind: "command" | "query";
|
|
4
|
+
readonly members: readonly Code[];
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly payload: Code | undefined;
|
|
7
|
+
readonly rejections: readonly (readonly [string, ImportRef])[];
|
|
8
|
+
readonly success: Code;
|
|
9
|
+
}
|
|
10
|
+
export interface PlannedModule {
|
|
11
|
+
readonly exportName: string;
|
|
12
|
+
readonly keyScope: Code | undefined;
|
|
13
|
+
readonly middleware: Code | undefined;
|
|
14
|
+
readonly module: ImportRef;
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly operations: readonly PlannedOperation[];
|
|
17
|
+
readonly source: string;
|
|
18
|
+
readonly subject: Code | undefined;
|
|
19
|
+
}
|
|
20
|
+
export declare function generatedFrom(text: string): string | undefined;
|
|
21
|
+
export declare function identifierOf(name: string): string;
|
|
22
|
+
export declare function emit(planned: PlannedModule): string;
|
|
23
|
+
//# sourceMappingURL=emit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAQ,KAAK,SAAS,EAAU,MAAM,UAAU,CAAC;AAGnE,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;IAC/D,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,IAAI,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,CAAC;CACnC;AAsBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9D;AAMD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjD;AAUD,wBAAgB,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAmDnD"}
|