@fougere/core 0.8.2-alpha.0 → 0.8.4-alpha.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/dist/boot/Emissions.d.ts.map +1 -1
- package/dist/boot/Emissions.js +3 -3
- package/dist/boot/Emissions.js.map +1 -1
- package/dist/boot/auth.d.ts +1 -1
- package/dist/boot/auth.d.ts.map +1 -1
- package/dist/boot/bootstrap.d.ts.map +1 -1
- package/dist/boot/bootstrap.js +339 -595
- package/dist/boot/bootstrap.js.map +1 -1
- package/dist/boot/card.js +1 -1
- package/dist/boot/card.js.map +1 -1
- package/dist/boot/hosted.d.ts +1 -1
- package/dist/boot/hosted.d.ts.map +1 -1
- package/dist/boot/install.d.ts +40 -0
- package/dist/boot/install.d.ts.map +1 -0
- package/dist/boot/install.js +298 -0
- package/dist/boot/install.js.map +1 -0
- package/dist/boot/ownership.d.ts +1 -1
- package/dist/boot/ownership.d.ts.map +1 -1
- package/dist/boot/ownership.js +14 -1
- package/dist/boot/ownership.js.map +1 -1
- package/dist/boot/seed.d.ts +7 -1
- package/dist/boot/seed.d.ts.map +1 -1
- package/dist/boot/seed.js +7 -2
- package/dist/boot/seed.js.map +1 -1
- package/dist/boot/statement-drift.d.ts +1 -1
- package/dist/boot/statement-drift.d.ts.map +1 -1
- package/dist/boot/together.d.ts +1 -1
- package/dist/boot/together.d.ts.map +1 -1
- package/dist/boot/together.js +1 -1
- package/dist/boot/together.js.map +1 -1
- package/dist/boot/types.d.ts +2 -2
- package/dist/boot/types.d.ts.map +1 -1
- package/dist/config-loader.d.ts +1 -1
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/contract.d.ts +2 -2
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +1 -1
- package/dist/contract.js.map +1 -1
- package/dist/conventions.d.ts.map +1 -0
- package/dist/conventions.js.map +1 -0
- package/dist/crypto/encoding.d.ts +0 -1
- package/dist/crypto/encoding.d.ts.map +1 -1
- package/dist/crypto/encoding.js +0 -7
- package/dist/crypto/encoding.js.map +1 -1
- package/dist/declare.js +1 -1
- package/dist/declare.js.map +1 -1
- package/dist/descriptor/index.d.ts +15 -0
- package/dist/descriptor/index.d.ts.map +1 -0
- package/dist/descriptor/index.js +14 -0
- package/dist/descriptor/index.js.map +1 -0
- package/dist/descriptor/surface.d.ts +8 -0
- package/dist/descriptor/surface.d.ts.map +1 -0
- package/dist/descriptor/surface.js +16 -0
- package/dist/descriptor/surface.js.map +1 -0
- package/dist/dispatch/HandlerFacade.d.ts +2 -0
- package/dist/dispatch/HandlerFacade.d.ts.map +1 -1
- package/dist/dispatch/HandlerFacade.js +7 -2
- package/dist/dispatch/HandlerFacade.js.map +1 -1
- package/dist/dispatch/StorageGuard.d.ts.map +1 -1
- package/dist/dispatch/StorageGuard.js +9 -23
- package/dist/dispatch/StorageGuard.js.map +1 -1
- package/dist/dispatch/presenterArguments.d.ts +7 -1
- package/dist/dispatch/presenterArguments.d.ts.map +1 -1
- package/dist/dispatch/presenterArguments.js +15 -4
- package/dist/dispatch/presenterArguments.js.map +1 -1
- package/dist/dispatch/validateInput.d.ts.map +1 -1
- package/dist/dispatch/validateInput.js +2 -2
- package/dist/dispatch/validateInput.js.map +1 -1
- package/dist/effective-operation.d.ts +1 -1
- package/dist/effective-operation.d.ts.map +1 -1
- package/dist/effective-operation.js +2 -12
- package/dist/effective-operation.js.map +1 -1
- package/dist/index.d.ts +7 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +2 -12
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +2 -12
- package/dist/node.js.map +1 -1
- package/dist/prefab/crud.d.ts +1 -1
- package/dist/prefab/crud.d.ts.map +1 -1
- package/dist/prefab/mirror.d.ts +10 -11
- package/dist/prefab/mirror.d.ts.map +1 -1
- package/dist/prefab/mirror.js +1 -27
- package/dist/prefab/mirror.js.map +1 -1
- package/dist/prefab/repository.d.ts +1 -1
- package/dist/prefab/repository.d.ts.map +1 -1
- package/dist/{scan/result.d.ts → scan.d.ts} +2 -2
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +2 -0
- package/dist/scan.js.map +1 -0
- package/dist/source.d.ts +1 -1
- package/dist/source.d.ts.map +1 -1
- package/dist/storage/criterion.d.ts.map +1 -0
- package/dist/{criterion.js → storage/criterion.js} +2 -2
- package/dist/storage/criterion.js.map +1 -0
- package/dist/{storage.d.ts → storage/port.d.ts} +6 -3
- package/dist/storage/port.d.ts.map +1 -0
- package/dist/{storage.js → storage/port.js} +13 -6
- package/dist/storage/port.js.map +1 -0
- package/dist/{store.d.ts → storage/store.d.ts} +1 -1
- package/dist/storage/store.d.ts.map +1 -0
- package/dist/{store.js → storage/store.js} +33 -17
- package/dist/storage/store.js.map +1 -0
- package/dist/verify.js +1 -1
- package/dist/verify.js.map +1 -1
- package/dist/wire/emit.d.ts.map +1 -0
- package/dist/wire/emit.js.map +1 -0
- package/dist/wire/errors.js +2 -2
- package/dist/wire/errors.js.map +1 -1
- package/package.json +10 -4
- package/src/boot/Emissions.ts +3 -3
- package/src/boot/auth.ts +1 -1
- package/src/boot/bootstrap.ts +386 -674
- package/src/boot/card.ts +1 -1
- package/src/boot/hosted.ts +1 -1
- package/src/boot/install.ts +390 -0
- package/src/boot/ownership.ts +17 -2
- package/src/boot/seed.ts +18 -3
- package/src/boot/statement-drift.ts +1 -1
- package/src/boot/together.ts +1 -1
- package/src/boot/types.ts +2 -2
- package/src/config-loader.ts +1 -1
- package/src/contract.ts +2 -2
- package/src/crypto/encoding.ts +0 -7
- package/src/declare.ts +1 -1
- package/src/descriptor/index.ts +15 -0
- package/src/descriptor/surface.ts +23 -0
- package/src/dispatch/HandlerFacade.ts +9 -2
- package/src/dispatch/StorageGuard.ts +8 -21
- package/src/dispatch/presenterArguments.ts +21 -9
- package/src/dispatch/validateInput.ts +2 -2
- package/src/effective-operation.ts +3 -14
- package/src/index.ts +10 -9
- package/src/node.ts +2 -16
- package/src/prefab/crud.ts +1 -1
- package/src/prefab/mirror.ts +12 -38
- package/src/prefab/repository.ts +1 -1
- package/src/{scan/result.ts → scan.ts} +1 -1
- package/src/source.ts +1 -1
- package/src/{criterion.ts → storage/criterion.ts} +2 -2
- package/src/{storage.ts → storage/port.ts} +20 -5
- package/src/{store.ts → storage/store.ts} +35 -16
- package/src/verify.ts +1 -1
- package/src/wire/call.ts +1 -1
- package/src/wire/errors.ts +2 -2
- package/dist/boot/boot.d.ts +0 -45
- package/dist/boot/boot.d.ts.map +0 -1
- package/dist/boot/boot.js +0 -63
- package/dist/boot/boot.js.map +0 -1
- package/dist/criterion.d.ts.map +0 -1
- package/dist/criterion.js.map +0 -1
- package/dist/declarations.d.ts +0 -29
- package/dist/declarations.d.ts.map +0 -1
- package/dist/declarations.js +0 -69
- package/dist/declarations.js.map +0 -1
- package/dist/emit.d.ts.map +0 -1
- package/dist/emit.js.map +0 -1
- package/dist/imports.d.ts +0 -16
- package/dist/imports.d.ts.map +0 -1
- package/dist/imports.js +0 -78
- package/dist/imports.js.map +0 -1
- package/dist/placement.d.ts +0 -25
- package/dist/placement.d.ts.map +0 -1
- package/dist/placement.js +0 -69
- package/dist/placement.js.map +0 -1
- package/dist/scan/adapters.d.ts +0 -3
- package/dist/scan/adapters.d.ts.map +0 -1
- package/dist/scan/adapters.js +0 -25
- package/dist/scan/adapters.js.map +0 -1
- package/dist/scan/bundling.d.ts +0 -3
- package/dist/scan/bundling.d.ts.map +0 -1
- package/dist/scan/bundling.js +0 -15
- package/dist/scan/bundling.js.map +0 -1
- package/dist/scan/contract.d.ts +0 -27
- package/dist/scan/contract.d.ts.map +0 -1
- package/dist/scan/contract.js +0 -46
- package/dist/scan/contract.js.map +0 -1
- package/dist/scan/conventions.d.ts.map +0 -1
- package/dist/scan/conventions.js.map +0 -1
- package/dist/scan/emit.d.ts +0 -10
- package/dist/scan/emit.d.ts.map +0 -1
- package/dist/scan/emit.js +0 -144
- package/dist/scan/emit.js.map +0 -1
- package/dist/scan/handler-parser.d.ts +0 -26
- package/dist/scan/handler-parser.d.ts.map +0 -1
- package/dist/scan/handler-parser.js +0 -607
- package/dist/scan/handler-parser.js.map +0 -1
- package/dist/scan/result.d.ts.map +0 -1
- package/dist/scan/result.js +0 -2
- package/dist/scan/result.js.map +0 -1
- package/dist/scan/scanner.d.ts +0 -12
- package/dist/scan/scanner.d.ts.map +0 -1
- package/dist/scan/scanner.js +0 -569
- package/dist/scan/scanner.js.map +0 -1
- package/dist/scan/statement.d.ts +0 -4
- package/dist/scan/statement.d.ts.map +0 -1
- package/dist/scan/statement.js +0 -135
- package/dist/scan/statement.js.map +0 -1
- package/dist/storage.d.ts.map +0 -1
- package/dist/storage.js.map +0 -1
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js.map +0 -1
- package/src/boot/boot.ts +0 -110
- package/src/declarations.ts +0 -102
- package/src/imports.ts +0 -94
- package/src/placement.ts +0 -86
- package/src/scan/adapters.ts +0 -32
- package/src/scan/bundling.ts +0 -14
- package/src/scan/contract.ts +0 -80
- package/src/scan/emit.ts +0 -160
- package/src/scan/handler-parser.ts +0 -695
- package/src/scan/scanner.ts +0 -694
- package/src/scan/statement.ts +0 -159
- /package/dist/{scan/conventions.d.ts → conventions.d.ts} +0 -0
- /package/dist/{scan/conventions.js → conventions.js} +0 -0
- /package/dist/{criterion.d.ts → storage/criterion.d.ts} +0 -0
- /package/dist/{emit.d.ts → wire/emit.d.ts} +0 -0
- /package/dist/{emit.js → wire/emit.js} +0 -0
- /package/src/{scan/conventions.ts → conventions.ts} +0 -0
- /package/src/{emit.ts → wire/emit.ts} +0 -0
package/dist/scan/result.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/scan/result.ts"],"names":[],"mappings":""}
|
package/dist/scan/scanner.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { ScanResult } from './result.js';
|
|
2
|
-
import { type Conventions, type ConventionsInput } from './conventions.js';
|
|
3
|
-
/** `@fronds/<name>` → the directory it names, for every frond of a project. */
|
|
4
|
-
export declare function frondAliases(root: string, conventions?: Conventions): Promise<Record<string, string>>;
|
|
5
|
-
export declare function scanProject(root: string, filter?: string[], conventionsInput?: ConventionsInput): Promise<ScanResult>;
|
|
6
|
-
/** What changes when a frond's domain changes — the paths a dev loop watches. */
|
|
7
|
-
export declare function watchPathsOf(frond: {
|
|
8
|
-
source: {
|
|
9
|
-
path: string;
|
|
10
|
-
};
|
|
11
|
-
}, scanRoot: string, conventions: Conventions): string[];
|
|
12
|
-
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/scan/scanner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,aAAa,CAAC;AAsB9D,OAAO,EACL,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAExC,MAAM,kBAAkB,CAAC;AA+jB1B,+EAA+E;AAC/E,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,WAAiC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA4BhI;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,UAAU,CAAC,CA2CrB;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAC1B,KAAK,EAAE;IAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EACnC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,GACvB,MAAM,EAAE,CAIV"}
|
package/dist/scan/scanner.js
DELETED
|
@@ -1,569 +0,0 @@
|
|
|
1
|
-
import { readdir, readFile } from 'node:fs/promises';
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
3
|
-
import { join, dirname, basename, resolve as resolvePath } from 'node:path';
|
|
4
|
-
import { ANONYMOUS_SCHEMA_NAME } from '@fougere/schema';
|
|
5
|
-
import { cardinalityOf } from '../wire/operation.js';
|
|
6
|
-
import { computeBindingPlan } from '../wire/binding.js';
|
|
7
|
-
import { parseAllHandlerMethods, parsePresenterMethods, parseConstructorParams, resetTypePrograms, seedTypeProgram, } from './handler-parser.js';
|
|
8
|
-
import { loadFrondConfig } from '../frond-config.js';
|
|
9
|
-
import { emitKeyOf } from '../emit.js';
|
|
10
|
-
import { getPresenterFields } from '../prefab/presenter.js';
|
|
11
|
-
import { storageKeyOf, togetherKeyOf } from '../storage.js';
|
|
12
|
-
import { targetOf, viewsOf, outputOf } from '../prefab/prefab.js';
|
|
13
|
-
import { ownedBy, repositoryKeyOf } from '../prefab/repository.js';
|
|
14
|
-
import { lowerFirst } from '@fougere/schema';
|
|
15
|
-
import { Fronds } from '../descriptor/Fronds.js';
|
|
16
|
-
import { getModuleLoader } from '../loader.js';
|
|
17
|
-
import { DEFAULT_CONVENTIONS, resolveConventions, frondPackage, providerDirsOf, frondDirsOf, } from './conventions.js';
|
|
18
|
-
// FS
|
|
19
|
-
/** What this scan run could not do. */
|
|
20
|
-
let diagnostics = [];
|
|
21
|
-
function record(d) {
|
|
22
|
-
diagnostics.push(d);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* An absent convention directory is the ordinary case — a frond without `presenters/` is not a
|
|
26
|
-
* defect.
|
|
27
|
-
*/
|
|
28
|
-
async function readEntries(path) {
|
|
29
|
-
try {
|
|
30
|
-
return await readdir(path, { withFileTypes: true });
|
|
31
|
-
}
|
|
32
|
-
catch (cause) {
|
|
33
|
-
if (cause?.code === 'ENOENT')
|
|
34
|
-
return [];
|
|
35
|
-
record({
|
|
36
|
-
severity: 'blocking',
|
|
37
|
-
code: 'directory-unreadable',
|
|
38
|
-
filePath: path,
|
|
39
|
-
// The path is NOT repeated here: `filePath` carries it, and a renderer that
|
|
40
|
-
// prints both wraps an absolute path twice into an unreadable box.
|
|
41
|
-
message: 'Could not read this directory — anything it declares is missing from '
|
|
42
|
-
+ 'the app, and nothing downstream can tell that from an empty directory.',
|
|
43
|
-
cause,
|
|
44
|
-
});
|
|
45
|
-
return [];
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
async function dirs(path) {
|
|
49
|
-
const entries = await readEntries(path);
|
|
50
|
-
return entries.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
51
|
-
}
|
|
52
|
-
async function files(path) {
|
|
53
|
-
const entries = await readEntries(path);
|
|
54
|
-
return entries
|
|
55
|
-
.filter((e) => e.isFile() && (e.name.endsWith('.ts') || e.name.endsWith('.js')))
|
|
56
|
-
.map((e) => join(path, e.name));
|
|
57
|
-
}
|
|
58
|
-
// Module
|
|
59
|
-
async function loadModule(filePath) {
|
|
60
|
-
return await getModuleLoader()(filePath);
|
|
61
|
-
}
|
|
62
|
-
async function loadDefault(filePath) {
|
|
63
|
-
const mod = await loadModule(filePath);
|
|
64
|
-
return mod.default;
|
|
65
|
-
}
|
|
66
|
-
async function loadClass(filePath) {
|
|
67
|
-
const ctor = await loadDefault(filePath);
|
|
68
|
-
// A convention directory holds classes, because a provider is registered under one and
|
|
69
|
-
// asked for by its type. What is NOT a class — a shared contract, a pure function, a
|
|
70
|
-
// table of constants — belongs beside them rather than among them, and saying where
|
|
71
|
-
// costs one line: measured twice on a real project, both times a file that had to move.
|
|
72
|
-
if (typeof ctor !== 'function' || !ctor.prototype) {
|
|
73
|
-
throw new Error(`${filePath}: default export is not a class. This directory is scanned for providers, `
|
|
74
|
-
+ 'which are registered under a class name — a contract or a pure function has no key '
|
|
75
|
-
+ `to answer under. Move it beside the directory, at the frond's root, where the scan `
|
|
76
|
-
+ 'reads nothing and an import still reaches it.');
|
|
77
|
-
}
|
|
78
|
-
return ctor;
|
|
79
|
-
}
|
|
80
|
-
function isEntityClass(value) {
|
|
81
|
-
return typeof value === 'function' && 'getFields' in value;
|
|
82
|
-
}
|
|
83
|
-
// Workspace
|
|
84
|
-
/** Walk up from project root to find the monorepo root (pnpm-workspace.yaml + packages/). */
|
|
85
|
-
function findWorkspaceRoot(from) {
|
|
86
|
-
let dir = resolvePath(from);
|
|
87
|
-
while (dir !== dirname(dir)) {
|
|
88
|
-
if (existsSync(join(dir, 'pnpm-workspace.yaml')) && existsSync(join(dir, 'packages')))
|
|
89
|
-
return dir;
|
|
90
|
-
dir = dirname(dir);
|
|
91
|
-
}
|
|
92
|
-
return resolvePath(from); // fallback: use project root itself
|
|
93
|
-
}
|
|
94
|
-
/** Strip the 'Handler' suffix → the name the handler answers to. */
|
|
95
|
-
function toAddress(className) {
|
|
96
|
-
const base = className.endsWith('Handler') ? className.slice(0, -7) : className;
|
|
97
|
-
return lowerFirst(base);
|
|
98
|
-
}
|
|
99
|
-
// Scan
|
|
100
|
-
/**
|
|
101
|
-
* The container key a constructor parameter asks for — derived from its TYPE, not from how the
|
|
102
|
-
* type was spelled.
|
|
103
|
-
*/
|
|
104
|
-
function depKeyOf(type) {
|
|
105
|
-
// `Facade<PostHandler>` — the second port, read exactly like the first. The type names
|
|
106
|
-
// what arrives: not the handler (its methods take positional arguments and it is never
|
|
107
|
-
// injected), but the door built in front of it. Same key whether that door is the local
|
|
108
|
-
// façade or a doublure, which is what makes the topology invisible from a signature.
|
|
109
|
-
const facadeOf = type.name === 'Facade' ? type.generics?.[0]?.name : undefined;
|
|
110
|
-
if (facadeOf)
|
|
111
|
-
return lowerFirst(facadeOf);
|
|
112
|
-
// `Emit<PostPublished>` — the third port, and the only one that names a SUBJECT rather
|
|
113
|
-
// than an interlocutor. Read like the other two: the type names what arrives, here a
|
|
114
|
-
// function that announces. Who receives it is not in the signature and never will be.
|
|
115
|
-
const factOf = type.name === 'Emit' ? type.generics?.[0]?.name : undefined;
|
|
116
|
-
if (factOf)
|
|
117
|
-
return emitKeyOf(factOf);
|
|
118
|
-
// `Together<[Account, Ledger], [RateMirror]>` — the fifth reading, and the only one whose
|
|
119
|
-
// argument is a SET rather than one subject. The AST hands each tuple back as a single
|
|
120
|
-
// string, so they are split here, where every other question of "how was it written" lives.
|
|
121
|
-
const frame = type.name === 'Together' ? type.generics?.[0]?.name : undefined;
|
|
122
|
-
if (frame)
|
|
123
|
-
return togetherKeyOf(tupleMembers(frame), tupleMembers(type.generics?.[1]?.name ?? ''));
|
|
124
|
-
// `RepositoryOf<Post>` — what an author writes when no repository file exists. The dual
|
|
125
|
-
// of the line below: one names the port, the other the holder, and both resolve to a key
|
|
126
|
-
// rather than to a class the author would have to invent.
|
|
127
|
-
const subject = type.name === 'RepositoryOf' ? type.generics?.[0]?.name : undefined;
|
|
128
|
-
if (subject)
|
|
129
|
-
return repositoryKeyOf(subject);
|
|
130
|
-
// The GENERIC names the subject, so a prefix does not change the key — `MeiliStorage<Card>`
|
|
131
|
-
// is `Card`'s storage. A class named `FileStorage` is untouched: it carries no generic.
|
|
132
|
-
const target = type.name.endsWith('Storage') && type.generics?.length === 1
|
|
133
|
-
? type.generics[0]?.name
|
|
134
|
-
: undefined;
|
|
135
|
-
if (!target)
|
|
136
|
-
return type.name;
|
|
137
|
-
return storageKeyOf(target);
|
|
138
|
-
}
|
|
139
|
-
/** `'[Account, Ledger]'` → `['Account', 'Ledger']`. */
|
|
140
|
-
function tupleMembers(raw) {
|
|
141
|
-
return raw.replace(/^\[|\]$/g, '').split(',').map((member) => member.trim()).filter(Boolean);
|
|
142
|
-
}
|
|
143
|
-
/** These readings are semantic. */
|
|
144
|
-
const ctorParamsOf = (filePath) => parseConstructorParams(filePath);
|
|
145
|
-
const presenterMethodsOf = (filePath) => parsePresenterMethods(filePath);
|
|
146
|
-
const handlerMethodsOf = (filePath, projectRoot) => parseAllHandlerMethods(filePath, projectRoot);
|
|
147
|
-
async function toProvider(filePath) {
|
|
148
|
-
const ctor = await loadClass(filePath);
|
|
149
|
-
// Read here, while the class is the one the source declared. What a bundler does to
|
|
150
|
-
// that name later is why it is carried rather than asked for again.
|
|
151
|
-
const name = ctor.name;
|
|
152
|
-
const params = await ctorParamsOf(filePath);
|
|
153
|
-
const deps = params.map((p) => depKeyOf(p.type));
|
|
154
|
-
// A repository inherits its constructor from `Repository(…)`, so the file declares none
|
|
155
|
-
// and the scan reads no parameter. The mixin knows what it was built for and says so at
|
|
156
|
-
// runtime — same escape as `Crud.__ops`, and the same reason: what a prefab fabricates,
|
|
157
|
-
// only the prefab can describe.
|
|
158
|
-
//
|
|
159
|
-
// An AGGREGATE owns several, and its base takes them in the declared order. It is handed
|
|
160
|
-
// no frame: the boundary and the unit of work are two statements, and a frame is ASKED FOR
|
|
161
|
-
// like anywhere else — see `prefab/repository.ts`.
|
|
162
|
-
const owned = ownedBy(ctor);
|
|
163
|
-
const target = targetOf(ctor);
|
|
164
|
-
if (owned.length > 1 && deps.length === 0) {
|
|
165
|
-
deps.push(...owned.map((entity) => storageKeyOf(lowerFirst(entity.name))));
|
|
166
|
-
}
|
|
167
|
-
else if (target && deps.length === 0) {
|
|
168
|
-
deps.push(storageKeyOf(lowerFirst(target.name)));
|
|
169
|
-
}
|
|
170
|
-
// `name` beside `ctor`, and it IS the registration key — what `depKeyOf` returns, since
|
|
171
|
-
// it reads the type as written. It used to be asked of `ctor.name` at boot, which held
|
|
172
|
-
// until a bundler lowered a static field and renamed the declaration doing it.
|
|
173
|
-
return { name, ctor, deps, filePath };
|
|
174
|
-
}
|
|
175
|
-
async function toEntityEntry(filePath) {
|
|
176
|
-
const exported = await loadDefault(filePath);
|
|
177
|
-
if (!isEntityClass(exported))
|
|
178
|
-
return null;
|
|
179
|
-
const runtimeName = exported.name;
|
|
180
|
-
// A derivation returned directly (`export default User.extend(...)`) carries the
|
|
181
|
-
// factory's own name, which the schema package stamps and exports. The file is then
|
|
182
|
-
// the declaration site and therefore the only name the author actually supplied;
|
|
183
|
-
// named classes keep winning.
|
|
184
|
-
const declaredName = runtimeName && runtimeName !== ANONYMOUS_SCHEMA_NAME
|
|
185
|
-
? runtimeName
|
|
186
|
-
: basename(filePath).replace(/\.[^.]+$/, '');
|
|
187
|
-
const name = lowerFirst(declaredName);
|
|
188
|
-
return { name, entityClass: exported, filePath };
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Resolve a TypeRef to a runtime schema if available in module exports.
|
|
192
|
-
* Handles arrays, generics (uses base name), and simple references.
|
|
193
|
-
*/
|
|
194
|
-
function resolveSchema(type, moduleExports) {
|
|
195
|
-
// An array's element type IS `type.name` — the arity rides beside it, so nothing has
|
|
196
|
-
// to be unwrapped here.
|
|
197
|
-
// For generics like Pagination<Post>, also check inner types
|
|
198
|
-
if (type.generics) {
|
|
199
|
-
for (const g of type.generics) {
|
|
200
|
-
const resolved = moduleExports[g.name];
|
|
201
|
-
if (resolved && typeof resolved === 'function' && 'getFields' in resolved) {
|
|
202
|
-
// `Partial<X>` in a signature IS the patch declaration (Crud.update) —
|
|
203
|
-
// project it onto the schema view instead of dropping the wrapper, so
|
|
204
|
-
// the facade validates in patch mode (absent field → untouched).
|
|
205
|
-
if (type.name === 'Partial' && 'partial' in resolved && typeof resolved.partial === 'function') {
|
|
206
|
-
return resolved.partial();
|
|
207
|
-
}
|
|
208
|
-
return resolved;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
const resolved = moduleExports[type.name];
|
|
213
|
-
if (resolved && typeof resolved === 'function' && 'getFields' in resolved) {
|
|
214
|
-
return resolved;
|
|
215
|
-
}
|
|
216
|
-
return undefined;
|
|
217
|
-
}
|
|
218
|
-
/** Parse ALL method signatures for unified binding. */
|
|
219
|
-
async function inferOperations(filePath, handlerName, moduleExports, collectorTypeNames, explicitInputs, declared, projectRoot) {
|
|
220
|
-
const map = new Map();
|
|
221
|
-
let parsed;
|
|
222
|
-
try {
|
|
223
|
-
parsed = await handlerMethodsOf(filePath, projectRoot);
|
|
224
|
-
}
|
|
225
|
-
catch (cause) {
|
|
226
|
-
// The handler still gets a façade — its methods exist at runtime — but with no
|
|
227
|
-
// contract: no binding plan, no input schema, no doc sentence. It used to
|
|
228
|
-
// return the empty map, so the app served a stranger's idea of the handler and
|
|
229
|
-
// said nothing. The operations are gone; the sentence saying so is not.
|
|
230
|
-
record({
|
|
231
|
-
severity: 'blocking',
|
|
232
|
-
code: 'handler-parse-failed',
|
|
233
|
-
filePath,
|
|
234
|
-
message: 'Could not parse this handler — its operations carry no contract, so the '
|
|
235
|
-
+ 'façade serves them unbound. Not the same as a handler with no operation.',
|
|
236
|
-
cause,
|
|
237
|
-
});
|
|
238
|
-
return map;
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* A base class the parse could not open — an installed package, typically, whose source is not
|
|
242
|
-
* in the workspace.
|
|
243
|
-
*/
|
|
244
|
-
for (const base of parsed.unresolvedHeritage) {
|
|
245
|
-
record({
|
|
246
|
-
severity: 'warning',
|
|
247
|
-
code: 'heritage-unresolved',
|
|
248
|
-
filePath,
|
|
249
|
-
message: `Could not resolve 'extends ${base}' — any operation it declares is absent `
|
|
250
|
-
+ `from this façade, and the scan cannot tell that from a base class with none. `
|
|
251
|
-
+ `State the contract in frond.config.ts to put it back.`,
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
for (const method of parsed.methods) {
|
|
255
|
-
// The contract is what carries the description; `signature` is the raw material it
|
|
256
|
-
// was read from. Leaving it only on the signature meant every consumer had to know
|
|
257
|
-
// to look one level down, and only the façade did.
|
|
258
|
-
const meta = {
|
|
259
|
-
signature: method,
|
|
260
|
-
...(method.description && { description: method.description }),
|
|
261
|
-
};
|
|
262
|
-
// A convention may omit a declaration only when it has one answer. Only values the
|
|
263
|
-
// caller supplies through the body are candidates: a schema-typed collector, fact or
|
|
264
|
-
// context parameter is not input merely because it names an entity. The old loop
|
|
265
|
-
// ignored provenance and assigned the first schema it met, so swapping two parameters
|
|
266
|
-
// silently changed the contract the façade used to validate the request body.
|
|
267
|
-
const binding = computeBindingPlan(method.params, collectorTypeNames);
|
|
268
|
-
const candidates = method.params.flatMap((param, index) => {
|
|
269
|
-
if (binding[index]?.source.kind !== 'input')
|
|
270
|
-
return [];
|
|
271
|
-
const schema = resolveSchema(param.type, moduleExports);
|
|
272
|
-
return schema ? [{ param, schema }] : [];
|
|
273
|
-
});
|
|
274
|
-
if (candidates.length === 1) {
|
|
275
|
-
meta.input = candidates[0].schema;
|
|
276
|
-
}
|
|
277
|
-
else if (candidates.length > 1
|
|
278
|
-
&& declared[method.name]?.input === undefined
|
|
279
|
-
&& !explicitInputs.has(method.name)) {
|
|
280
|
-
const subject = `${handlerName}.${method.name}`;
|
|
281
|
-
record({
|
|
282
|
-
severity: 'blocking',
|
|
283
|
-
code: 'input-contract-ambiguous',
|
|
284
|
-
filePath,
|
|
285
|
-
subject,
|
|
286
|
-
message: `Cannot infer the input contract for ${subject}: ${candidates.length} entity `
|
|
287
|
-
+ `candidates — ${candidates.map(({ param }) => `${param.name}: ${param.type.raw}`).join('; ')}. `
|
|
288
|
-
+ `Declare operations.${method.name}.input in frond.config.ts.`,
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
if (method.returnType) {
|
|
292
|
-
meta.output = resolveSchema(method.returnType, moduleExports);
|
|
293
|
-
// `output` is the shape of one row; this says how many rows come back.
|
|
294
|
-
meta.cardinality = cardinalityOf(method.returnType);
|
|
295
|
-
}
|
|
296
|
-
map.set(method.name, meta);
|
|
297
|
-
}
|
|
298
|
-
return map;
|
|
299
|
-
}
|
|
300
|
-
async function toHandlerEntry(filePath, entityByClassName, collectorTypeNames, explicitInputs, projectRoot, surface) {
|
|
301
|
-
const mod = await loadModule(filePath);
|
|
302
|
-
const ctor = mod.default;
|
|
303
|
-
if (typeof ctor !== 'function' || !ctor.prototype)
|
|
304
|
-
throw new Error(`${filePath}: default export is not a class`);
|
|
305
|
-
// Augment module exports with known entity classes so resolveSchema
|
|
306
|
-
// can find them when T is substituted (e.g. T → Post after parsing Crud(Post))
|
|
307
|
-
const augmented = { ...mod };
|
|
308
|
-
for (const [className, entityClass] of entityByClassName) {
|
|
309
|
-
if (!(className in augmented))
|
|
310
|
-
augmented[className] = entityClass;
|
|
311
|
-
}
|
|
312
|
-
const address = toAddress(ctor.name);
|
|
313
|
-
const declaredOps = ctor.__ops ?? {};
|
|
314
|
-
const operations = await inferOperations(filePath, ctor.name, augmented, collectorTypeNames, explicitInputs, declaredOps, projectRoot);
|
|
315
|
-
const ctorParams = await ctorParamsOf(filePath);
|
|
316
|
-
const deps = ctorParams.map((p) => depKeyOf(p.type));
|
|
317
|
-
// Read output override from Crud(Entity, Output) — static __output property
|
|
318
|
-
// A handler-wide view, when it is not simply the entity — the two are compared by
|
|
319
|
-
// identity, which is why both slots are read through the same door.
|
|
320
|
-
const subject = targetOf(ctor);
|
|
321
|
-
const declared = outputOf(ctor);
|
|
322
|
-
const outputOverride = declared && subject && declared !== subject
|
|
323
|
-
? declared
|
|
324
|
-
: undefined;
|
|
325
|
-
return {
|
|
326
|
-
name: lowerFirst(ctor.name),
|
|
327
|
-
address,
|
|
328
|
-
ctor: ctor,
|
|
329
|
-
operations,
|
|
330
|
-
deps,
|
|
331
|
-
filePath,
|
|
332
|
-
outputOverride,
|
|
333
|
-
surface,
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
/** Strip '.seed' suffix → entity name. 'Author.seed.ts' → 'author'. */
|
|
337
|
-
function toSeedEntityName(fileName) {
|
|
338
|
-
const base = fileName.replace(/\.seed\.(ts|js)$/, '').replace(/\.(ts|js)$/, '');
|
|
339
|
-
return lowerFirst(base);
|
|
340
|
-
}
|
|
341
|
-
async function toSeedEntry(filePath) {
|
|
342
|
-
const data = await loadDefault(filePath);
|
|
343
|
-
if (Array.isArray(data) || typeof data === 'function') {
|
|
344
|
-
const fileName = filePath.split('/').pop();
|
|
345
|
-
return { entityName: toSeedEntityName(fileName), data: data, filePath };
|
|
346
|
-
}
|
|
347
|
-
return null;
|
|
348
|
-
}
|
|
349
|
-
async function toPresenterEntry(filePath) {
|
|
350
|
-
const ctor = await loadClass(filePath);
|
|
351
|
-
const target = targetOf(ctor);
|
|
352
|
-
if (!target)
|
|
353
|
-
return null;
|
|
354
|
-
const entityName = lowerFirst(target.name);
|
|
355
|
-
const fields = getPresenterFields(ctor);
|
|
356
|
-
const presenterParams = await ctorParamsOf(filePath);
|
|
357
|
-
const deps = presenterParams.map((p) => depKeyOf(p.type));
|
|
358
|
-
let fieldMeta = [];
|
|
359
|
-
try {
|
|
360
|
-
const parsed = await presenterMethodsOf(filePath);
|
|
361
|
-
fieldMeta = parsed.map((m) => ({
|
|
362
|
-
name: m.name,
|
|
363
|
-
returnType: m.returnType?.name,
|
|
364
|
-
// One array level IS the page — the method answers one value per row. What is left
|
|
365
|
-
// over is the field's own arity: `string[]` a scalar per row, `string[][]` a list.
|
|
366
|
-
list: (m.returnType?.arrayDepth ?? 0) > 1,
|
|
367
|
-
nullable: m.returnType?.nullable,
|
|
368
|
-
// Everything after the rows is bound like a handler's argument.
|
|
369
|
-
params: m.params.slice(1),
|
|
370
|
-
}));
|
|
371
|
-
// The rows parameter is stripped just above, and nothing used to check its SHAPE.
|
|
372
|
-
// A computed field receives the PAGE and answers one value per row, so a method
|
|
373
|
-
// written `items(order: Order)` compiles and dies at the first call with a 500
|
|
374
|
-
// (`expected 1 value(s) for 1 row(s), got 0`) — while the information sat here, at
|
|
375
|
-
// the scan. Every own method of a presenter IS a computed field
|
|
376
|
-
// (`getPresenterFields`), so there is no private helper to spare.
|
|
377
|
-
//
|
|
378
|
-
// An ERROR at boot, not a refusal: a `blocking` scan diagnostic is logged and the
|
|
379
|
-
// app still starts (`bootstrap.ts`, and the comment above that loop says why). Making
|
|
380
|
-
// it refuse means deciding that a declaration which cannot work is an unresolved
|
|
381
|
-
// CONTRACT — the one thing that does stop the boot — and that is a decision, not a
|
|
382
|
-
// severity.
|
|
383
|
-
for (const method of parsed) {
|
|
384
|
-
const rows = method.params[0];
|
|
385
|
-
if (rows && rows.type.array === true)
|
|
386
|
-
continue;
|
|
387
|
-
record({
|
|
388
|
-
severity: 'blocking',
|
|
389
|
-
code: 'presenter-field-not-page',
|
|
390
|
-
filePath,
|
|
391
|
-
subject: `${ctor.name ?? 'Presenter'}.${method.name}`,
|
|
392
|
-
message: `${method.name}(${rows ? `${rows.name}: ${rows.type.raw}` : ''}) is a computed `
|
|
393
|
-
+ `field, so it receives the PAGE and must answer one value per row. Declare `
|
|
394
|
-
+ `${method.name}(${rows?.name ?? 'rows'}: ${target.name ?? 'Entity'}[]) `
|
|
395
|
-
+ `and return an array of the same length.`,
|
|
396
|
-
});
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
catch { /* parse failure — fall back to untyped */ }
|
|
400
|
-
// Declared at runtime on the class, so it survives a scan that resolved nothing.
|
|
401
|
-
return { entityName, ctor, fields, fieldMeta, views: viewsOf(ctor), deps, filePath };
|
|
402
|
-
}
|
|
403
|
-
async function toCollectorEntry(filePath) {
|
|
404
|
-
const ctor = await loadClass(filePath);
|
|
405
|
-
const target = targetOf(ctor);
|
|
406
|
-
if (!target)
|
|
407
|
-
return null;
|
|
408
|
-
// The target's NAME and nothing else — a collector reads no fields, so the class it
|
|
409
|
-
// was built on needs no schema.
|
|
410
|
-
const typeName = lowerFirst(target.name);
|
|
411
|
-
const collectorParams = await ctorParamsOf(filePath);
|
|
412
|
-
const deps = collectorParams.map((p) => depKeyOf(p.type));
|
|
413
|
-
return { typeName, ctor, deps, filePath };
|
|
414
|
-
}
|
|
415
|
-
async function scanFrond(frondPath, name, source, conventions, projectRoot) {
|
|
416
|
-
const { entities: entitiesDir, handlers: handlersDir, presenters: presentersDir, collectors: collectorsDir, seeds: seedsDir, } = conventions.dirs;
|
|
417
|
-
/** A convention directory, read by whoever knows the shape it holds. */
|
|
418
|
-
const collect = async (dir, read) => {
|
|
419
|
-
const entries = await Promise.all((await files(join(frondPath, dir))).map(read));
|
|
420
|
-
return entries.filter((entry) => entry !== null);
|
|
421
|
-
};
|
|
422
|
-
// services/ and repositories/ — two spellings, one provider list.
|
|
423
|
-
const providers = (await Promise.all(providerDirsOf(conventions).map((dir) => collect(dir, toProvider)))).flat();
|
|
424
|
-
const entities = await collect(entitiesDir, toEntityEntry);
|
|
425
|
-
const collectors = await collect(collectorsDir, toCollectorEntry);
|
|
426
|
-
const collectorTypeNames = new Set(collectors.map((collector) => collector.typeName));
|
|
427
|
-
const frondConfig = await loadFrondConfig(frondPath);
|
|
428
|
-
const explicitInputs = new Set(Object.entries(frondConfig?.operations ?? {})
|
|
429
|
-
.filter(([, contract]) => contract.input !== undefined)
|
|
430
|
-
.map(([operation]) => operation));
|
|
431
|
-
// Handlers resolve `T` against the entities, so those come first.
|
|
432
|
-
const entityByClassName = new Map(entities.map((e) => [e.entityClass.name, e.entityClass]));
|
|
433
|
-
const handlers = await collect(handlersDir, (f) => toHandlerEntry(f, entityByClassName, collectorTypeNames, explicitInputs, projectRoot));
|
|
434
|
-
// A subdirectory of handlers/ is a named surface — the one directory whose CHILDREN
|
|
435
|
-
// are part of the convention too.
|
|
436
|
-
for (const surface of await dirs(join(frondPath, handlersDir))) {
|
|
437
|
-
handlers.push(...await collect(join(handlersDir, surface), (f) => toHandlerEntry(f, entityByClassName, collectorTypeNames, explicitInputs, projectRoot, surface)));
|
|
438
|
-
}
|
|
439
|
-
const presenters = await collect(presentersDir, toPresenterEntry);
|
|
440
|
-
const seeds = await collect(seedsDir, toSeedEntry);
|
|
441
|
-
// Mark exposed entries: frond.config.ts takes precedence, then @expose decorator
|
|
442
|
-
if (frondConfig?.expose) {
|
|
443
|
-
const exposeSet = new Set(frondConfig.expose);
|
|
444
|
-
for (const e of entities) {
|
|
445
|
-
e.exposed = exposeSet.has(e.entityClass.name);
|
|
446
|
-
}
|
|
447
|
-
for (const h of handlers) {
|
|
448
|
-
h.exposed = exposeSet.has(h.ctor.name);
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
else {
|
|
452
|
-
// Fallback: check @expose decorator, default to true (expose everything unless explicitly hidden)
|
|
453
|
-
for (const e of entities) {
|
|
454
|
-
e.exposed = e.entityClass.__exposed !== false;
|
|
455
|
-
}
|
|
456
|
-
for (const h of handlers) {
|
|
457
|
-
h.exposed = h.ctor.__exposed !== false;
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
// Flatten per-op config overrides: the only thing that needs flattening is the handler
|
|
461
|
-
// CLASS, which becomes its name (that is the DI key). Everything else — the surface keys
|
|
462
|
-
// AND the contract keys (`input`, `binding`) — travels verbatim, so a slot added to
|
|
463
|
-
// OperationOverride reaches its reader without a stop here. Enumerating keys by hand is
|
|
464
|
-
// what used to silently drop whatever was added last (the same invariant `cloneField`
|
|
465
|
-
// holds one layer down).
|
|
466
|
-
const operationsOverrides = frondConfig?.operations
|
|
467
|
-
? Object.fromEntries(Object.entries(frondConfig.operations).map(([opName, { handler, ...rest }]) => [
|
|
468
|
-
opName,
|
|
469
|
-
{ ...rest, handlerName: handler?.name },
|
|
470
|
-
]))
|
|
471
|
-
: undefined;
|
|
472
|
-
return {
|
|
473
|
-
name,
|
|
474
|
-
source,
|
|
475
|
-
providers,
|
|
476
|
-
entities,
|
|
477
|
-
handlers,
|
|
478
|
-
presenters,
|
|
479
|
-
collectors,
|
|
480
|
-
seeds,
|
|
481
|
-
surfaces: frondConfig?.surfaces,
|
|
482
|
-
reads: frondConfig?.reads,
|
|
483
|
-
operationsOverrides,
|
|
484
|
-
};
|
|
485
|
-
}
|
|
486
|
-
/** The frond's name — the directory, unless its `package.json` renames it. */
|
|
487
|
-
async function frondNameOf(frondPath, dirName) {
|
|
488
|
-
try {
|
|
489
|
-
const pkg = JSON.parse(await readFile(join(frondPath, 'package.json'), 'utf8'));
|
|
490
|
-
const declared = pkg.fougere?.frond;
|
|
491
|
-
return typeof declared === 'string' && declared.length > 0 ? declared : dirName;
|
|
492
|
-
}
|
|
493
|
-
catch {
|
|
494
|
-
return dirName;
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
/**
|
|
498
|
-
* A frond is a directory carrying the convention, and the project root is one such directory — so
|
|
499
|
-
* a single-domain app writes `entities/` next to `app/` and never names anything.
|
|
500
|
-
*/
|
|
501
|
-
async function rootFrondOf(root, workspaceRoot, conventions) {
|
|
502
|
-
if ((await files(join(root, conventions.dirs.entities))).length === 0)
|
|
503
|
-
return null;
|
|
504
|
-
const name = await frondNameOf(root, basename(resolvePath(root)));
|
|
505
|
-
return scanFrond(root, name, { path: root, package: frondPackage(name, conventions) }, conventions, workspaceRoot);
|
|
506
|
-
}
|
|
507
|
-
/** `@fronds/<name>` → the directory it names, for every frond of a project. */
|
|
508
|
-
export async function frondAliases(root, conventions = DEFAULT_CONVENTIONS) {
|
|
509
|
-
const frondsDir = join(root, conventions.fronds);
|
|
510
|
-
const aliases = {};
|
|
511
|
-
// The root itself is a frond when it carries `entities/` — same rule as the scan.
|
|
512
|
-
if ((await files(join(root, conventions.dirs.entities))).length > 0) {
|
|
513
|
-
aliases[frondPackage(await frondNameOf(root, basename(resolvePath(root))), conventions)] = resolvePath(root);
|
|
514
|
-
}
|
|
515
|
-
for (const dir of await dirs(frondsDir)) {
|
|
516
|
-
const path = join(frondsDir, dir);
|
|
517
|
-
aliases[frondPackage(await frondNameOf(path, dir), conventions)] = resolvePath(path);
|
|
518
|
-
}
|
|
519
|
-
/** A SYNCED frond answers to the same name. */
|
|
520
|
-
try {
|
|
521
|
-
const registry = JSON.parse(await readFile(join(root, '.fougere', 'remotes.json'), 'utf8'));
|
|
522
|
-
for (const [name, entry] of Object.entries(registry)) {
|
|
523
|
-
if (typeof entry?.path !== 'string' || aliases[frondPackage(name, conventions)])
|
|
524
|
-
continue;
|
|
525
|
-
aliases[frondPackage(name, conventions)] = resolvePath(entry.path);
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
catch {
|
|
529
|
-
// No registry, or an unreadable one: nothing was synced here. Not this function's
|
|
530
|
-
// complaint — `sync` owns that file and reports on it.
|
|
531
|
-
}
|
|
532
|
-
return aliases;
|
|
533
|
-
}
|
|
534
|
-
export async function scanProject(root, filter, conventionsInput) {
|
|
535
|
-
const conventions = resolveConventions(conventionsInput);
|
|
536
|
-
resetTypePrograms();
|
|
537
|
-
// A run owns its findings: two scans in one process (a test suite, a watcher)
|
|
538
|
-
// must not inherit each other's.
|
|
539
|
-
diagnostics = [];
|
|
540
|
-
const frondsDir = join(root, conventions.fronds);
|
|
541
|
-
const dirNames = await dirs(frondsDir);
|
|
542
|
-
// Resolve workspace root (parent of packages/) for package import resolution
|
|
543
|
-
// For monorepo: root is the project dir (e.g. demos/nuxt-blog), workspace root is the repo root
|
|
544
|
-
const workspaceRoot = findWorkspaceRoot(root);
|
|
545
|
-
// One program for this run. Seeded here because the parser rebuilds on every root it
|
|
546
|
-
// has not seen, and a frond lives outside its project's tsconfig `include`. Both keys
|
|
547
|
-
// are seeded: heritage reads under the workspace root, a constructor under none.
|
|
548
|
-
const declarations = (await Promise.all([root, ...dirNames.map((dir) => join(frondsDir, dir))].flatMap((frondPath) => frondDirsOf(conventions).map((dir) => files(join(frondPath, dir)))))).flat();
|
|
549
|
-
await seedTypeProgram(declarations, workspaceRoot);
|
|
550
|
-
await seedTypeProgram(declarations);
|
|
551
|
-
const [rootFrond, under] = await Promise.all([
|
|
552
|
-
rootFrondOf(root, workspaceRoot, conventions),
|
|
553
|
-
Promise.all(dirNames.map(async (dir) => {
|
|
554
|
-
const name = await frondNameOf(join(frondsDir, dir), dir);
|
|
555
|
-
return scanFrond(join(frondsDir, dir), name, { path: join(frondsDir, dir), package: frondPackage(name, conventions) }, conventions, workspaceRoot);
|
|
556
|
-
})),
|
|
557
|
-
]);
|
|
558
|
-
// The app's own domain first, then the ones it took in.
|
|
559
|
-
const all = rootFrond ? [rootFrond, ...under] : under;
|
|
560
|
-
const fronds = Fronds.hosting(filter ? all.filter((f) => filter.includes(f.name)) : all);
|
|
561
|
-
return { fronds, diagnostics };
|
|
562
|
-
}
|
|
563
|
-
/** What changes when a frond's domain changes — the paths a dev loop watches. */
|
|
564
|
-
export function watchPathsOf(frond, scanRoot, conventions) {
|
|
565
|
-
return frond.source.path === scanRoot
|
|
566
|
-
? frondDirsOf(conventions).map((dir) => join(scanRoot, dir))
|
|
567
|
-
: [frond.source.path];
|
|
568
|
-
}
|
|
569
|
-
//# sourceMappingURL=scanner.js.map
|
package/dist/scan/scanner.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/scan/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/scan/statement.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"statement.d.ts","sourceRoot":"","sources":["../../src/scan/statement.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsI9C,2FAA2F;AAG3F,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAiBtD"}
|