tailar 0.4.0 → 0.5.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/README.md +5 -2
- package/README.npm.md +5 -2
- package/dist/api/client.d.ts +22 -28
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +111 -236
- package/dist/api/client.js.map +1 -1
- package/dist/api/errors.d.ts +16 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +32 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/auth/flow.js +1 -1
- package/dist/auth/flow.js.map +1 -1
- package/dist/commands/add.d.ts +9 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +63 -113
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +106 -70
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +1 -23
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/playground.d.ts.map +1 -1
- package/dist/commands/playground.js +2 -1
- package/dist/commands/playground.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +9 -4
- package/dist/commands/sync.js.map +1 -1
- package/dist/installers/agent-files.d.ts +26 -0
- package/dist/installers/agent-files.d.ts.map +1 -0
- package/dist/installers/agent-files.js +110 -0
- package/dist/installers/agent-files.js.map +1 -0
- package/dist/installers/dependencies.d.ts +10 -0
- package/dist/installers/dependencies.d.ts.map +1 -1
- package/dist/installers/dependencies.js +52 -8
- package/dist/installers/dependencies.js.map +1 -1
- package/dist/installers/files.d.ts +2 -6
- package/dist/installers/files.d.ts.map +1 -1
- package/dist/installers/files.js +30 -35
- package/dist/installers/files.js.map +1 -1
- package/dist/installers/install-feature.d.ts +25 -1
- package/dist/installers/install-feature.d.ts.map +1 -1
- package/dist/installers/install-feature.js +100 -59
- package/dist/installers/install-feature.js.map +1 -1
- package/dist/installers/managed-blocks.d.ts +26 -0
- package/dist/installers/managed-blocks.d.ts.map +1 -0
- package/dist/installers/managed-blocks.js +47 -0
- package/dist/installers/managed-blocks.js.map +1 -0
- package/dist/installers/post-install.d.ts +12 -0
- package/dist/installers/post-install.d.ts.map +1 -1
- package/dist/installers/post-install.js +19 -0
- package/dist/installers/post-install.js.map +1 -1
- package/dist/installers/setup-guide.d.ts +38 -0
- package/dist/installers/setup-guide.d.ts.map +1 -0
- package/dist/installers/setup-guide.js +206 -0
- package/dist/installers/setup-guide.js.map +1 -0
- package/dist/installers/variant-switch.d.ts +34 -0
- package/dist/installers/variant-switch.d.ts.map +1 -0
- package/dist/installers/variant-switch.js +139 -0
- package/dist/installers/variant-switch.js.map +1 -0
- package/dist/installers/when.d.ts +22 -0
- package/dist/installers/when.d.ts.map +1 -0
- package/dist/installers/when.js +35 -0
- package/dist/installers/when.js.map +1 -0
- package/dist/registry/query.d.ts +6 -1
- package/dist/registry/query.d.ts.map +1 -1
- package/dist/registry/query.js +22 -0
- package/dist/registry/query.js.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/registry.d.ts +65 -6
- package/dist/types/registry.d.ts.map +1 -1
- package/dist/types/wizard.d.ts +34 -8
- package/dist/types/wizard.d.ts.map +1 -1
- package/dist/types/wizard.js +74 -40
- package/dist/types/wizard.js.map +1 -1
- package/dist/utils/clack-wizard.d.ts +3 -1
- package/dist/utils/clack-wizard.d.ts.map +1 -1
- package/dist/utils/clack-wizard.js +205 -107
- package/dist/utils/clack-wizard.js.map +1 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +12 -5
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/init-flags.d.ts +43 -8
- package/dist/utils/init-flags.d.ts.map +1 -1
- package/dist/utils/init-flags.js +119 -32
- package/dist/utils/init-flags.js.map +1 -1
- package/dist/utils/local-options.js +1 -1
- package/dist/utils/local-options.js.map +1 -1
- package/dist/utils/next-steps.d.ts +9 -0
- package/dist/utils/next-steps.d.ts.map +1 -0
- package/dist/utils/next-steps.js +15 -0
- package/dist/utils/next-steps.js.map +1 -0
- package/dist/utils/presets.d.ts +34 -0
- package/dist/utils/presets.d.ts.map +1 -0
- package/dist/utils/presets.js +82 -0
- package/dist/utils/presets.js.map +1 -0
- package/dist/utils/recipe-id.d.ts +19 -0
- package/dist/utils/recipe-id.d.ts.map +1 -0
- package/dist/utils/recipe-id.js +72 -0
- package/dist/utils/recipe-id.js.map +1 -0
- package/dist/utils/recipe.d.ts +49 -0
- package/dist/utils/recipe.d.ts.map +1 -0
- package/dist/utils/recipe.js +227 -0
- package/dist/utils/recipe.js.map +1 -0
- package/package.json +7 -1
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Variant switch cleanup
|
|
3
|
+
*
|
|
4
|
+
* Installing a different variant of an installed module (`add --variant X
|
|
5
|
+
* --force`, `sync --variant/--provider X`) copies the new variant's files over
|
|
6
|
+
* the module but used to leave files that only the previous variant owned
|
|
7
|
+
* (storage r2 -> s3 left providers/r2.ts and its contract test behind).
|
|
8
|
+
*
|
|
9
|
+
* The leftovers are computed from the registry alone: the previous variant's
|
|
10
|
+
* own mapped targets, minus every target the new install writes. Nothing else
|
|
11
|
+
* is ever deleted.
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync } from "fs";
|
|
14
|
+
import { unlink } from "fs/promises";
|
|
15
|
+
import { isAbsolute, relative, resolve } from "path";
|
|
16
|
+
import { getVariant } from "../registry/query.js";
|
|
17
|
+
import { getLocalRegistry, readLocalComponentFile } from "../registry/local-mode.js";
|
|
18
|
+
import { fetchComponentFile } from "../api/client.js";
|
|
19
|
+
import { logger } from "../utils/logger.js";
|
|
20
|
+
import { evaluateWhen } from "./when.js";
|
|
21
|
+
import { resolveTemplatePath } from "./files.js";
|
|
22
|
+
/** Targets an install of these mappings writes. Merge and managed files are shared, so they never count as owned. */
|
|
23
|
+
function installedTargets(files, context, vars, config) {
|
|
24
|
+
const out = new Set();
|
|
25
|
+
for (const mapping of files) {
|
|
26
|
+
if (!evaluateWhen(mapping.when, config))
|
|
27
|
+
continue;
|
|
28
|
+
out.add(resolveTemplatePath(mapping.target, context, vars));
|
|
29
|
+
}
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Files only the previous variant installed: its own mapped targets (with the
|
|
34
|
+
* installer's `when` and template logic) that the new install does not write.
|
|
35
|
+
* Returns [] unless the recorded variant differs from the new one.
|
|
36
|
+
*/
|
|
37
|
+
export function staleVariantTargets(entry, previousVariant, nextVariant, context, vars = {}) {
|
|
38
|
+
if (!previousVariant || !nextVariant || previousVariant === nextVariant)
|
|
39
|
+
return [];
|
|
40
|
+
const previous = getVariant(entry, previousVariant);
|
|
41
|
+
if (!previous?.files?.length)
|
|
42
|
+
return [];
|
|
43
|
+
const next = getVariant(entry, nextVariant);
|
|
44
|
+
// `when` is evaluated against the config as the new install sees it
|
|
45
|
+
const config = context.config;
|
|
46
|
+
const written = installedTargets([...entry.files, ...(next?.files ?? [])], context, vars, config);
|
|
47
|
+
const owned = previous.files.filter((m) => !m.strategy || m.strategy === "override");
|
|
48
|
+
const stale = new Set();
|
|
49
|
+
for (const mapping of owned) {
|
|
50
|
+
if (!evaluateWhen(mapping.when, config))
|
|
51
|
+
continue;
|
|
52
|
+
const target = resolveTemplatePath(mapping.target, context, vars);
|
|
53
|
+
if (!written.has(target))
|
|
54
|
+
stale.add(target);
|
|
55
|
+
}
|
|
56
|
+
return [...stale];
|
|
57
|
+
}
|
|
58
|
+
/** Delete the leftovers that exist inside the project. Returns the paths removed. */
|
|
59
|
+
export async function removeStaleFiles(projectRoot, targets) {
|
|
60
|
+
const root = resolve(projectRoot);
|
|
61
|
+
const removed = [];
|
|
62
|
+
for (const target of targets) {
|
|
63
|
+
const full = resolve(root, target);
|
|
64
|
+
const rel = relative(root, full);
|
|
65
|
+
// never touch anything outside the project
|
|
66
|
+
if (!rel || rel.startsWith("..") || isAbsolute(rel))
|
|
67
|
+
continue;
|
|
68
|
+
if (!existsSync(full))
|
|
69
|
+
continue;
|
|
70
|
+
await unlink(full);
|
|
71
|
+
removed.push(target);
|
|
72
|
+
}
|
|
73
|
+
return removed;
|
|
74
|
+
}
|
|
75
|
+
const ENV_EXAMPLE = /(^|\/)\.env[^/]*\.example$/;
|
|
76
|
+
async function readSource(entry, variant, source) {
|
|
77
|
+
const local = getLocalRegistry();
|
|
78
|
+
if (local?.enabled) {
|
|
79
|
+
return readLocalComponentFile(local.componentsPath, entry.type, entry.name, source);
|
|
80
|
+
}
|
|
81
|
+
return fetchComponentFile(entry.type, entry.name, source, { variant });
|
|
82
|
+
}
|
|
83
|
+
function envNames(content) {
|
|
84
|
+
const names = new Set();
|
|
85
|
+
for (const line of content.split(/\r?\n/)) {
|
|
86
|
+
const match = /^\s*([A-Z][A-Z0-9_]*)\s*=/.exec(line);
|
|
87
|
+
if (match)
|
|
88
|
+
names.add(match[1]);
|
|
89
|
+
}
|
|
90
|
+
return names;
|
|
91
|
+
}
|
|
92
|
+
async function variantEnvNames(entry, variantName, config) {
|
|
93
|
+
const files = getVariant(entry, variantName)?.files ?? [];
|
|
94
|
+
const mapping = files.find((m) => ENV_EXAMPLE.test(m.target) && evaluateWhen(m.when, config));
|
|
95
|
+
if (!mapping)
|
|
96
|
+
return null;
|
|
97
|
+
try {
|
|
98
|
+
return envNames(await readSource(entry, variantName, mapping.source));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/** Env var names that differ between the two variants' env.example files. */
|
|
105
|
+
export async function envVarChanges(entry, previousVariant, nextVariant, config) {
|
|
106
|
+
const before = await variantEnvNames(entry, previousVariant, config);
|
|
107
|
+
const after = await variantEnvNames(entry, nextVariant, config);
|
|
108
|
+
if (!before || !after)
|
|
109
|
+
return null;
|
|
110
|
+
return {
|
|
111
|
+
removed: [...before].filter((n) => !after.has(n)),
|
|
112
|
+
added: [...after].filter((n) => !before.has(n)),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Run after the new variant's files are written. Removes the previous
|
|
117
|
+
* variant's leftovers and reports which env vars changed.
|
|
118
|
+
*/
|
|
119
|
+
export async function cleanupPreviousVariant(entry, previousVariant, nextVariant, context, vars = {}) {
|
|
120
|
+
const stale = staleVariantTargets(entry, previousVariant, nextVariant, context, vars);
|
|
121
|
+
const removed = await removeStaleFiles(context.root, stale);
|
|
122
|
+
if (!previousVariant || !nextVariant || previousVariant === nextVariant) {
|
|
123
|
+
return { removed };
|
|
124
|
+
}
|
|
125
|
+
if (removed.length > 0) {
|
|
126
|
+
logger.info(`Removed ${removed.length} files from the previous variant: ${removed.join(", ")}`);
|
|
127
|
+
}
|
|
128
|
+
const env = await envVarChanges(entry, previousVariant, nextVariant, context.config);
|
|
129
|
+
if (env && (env.removed.length > 0 || env.added.length > 0)) {
|
|
130
|
+
const parts = [];
|
|
131
|
+
if (env.removed.length > 0)
|
|
132
|
+
parts.push(`no longer used: ${env.removed.join(", ")}`);
|
|
133
|
+
if (env.added.length > 0)
|
|
134
|
+
parts.push(`new: ${env.added.join(", ")}`);
|
|
135
|
+
logger.info(`Env vars changed (${previousVariant} -> ${nextVariant}), update your .env. ${parts.join("; ")}`);
|
|
136
|
+
}
|
|
137
|
+
return { removed };
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=variant-switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variant-switch.js","sourceRoot":"","sources":["../../src/installers/variant-switch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `when` predicate
|
|
3
|
+
*
|
|
4
|
+
* Registry file mappings and post-install steps can depend on what is already
|
|
5
|
+
* installed in the project, read from .tailar.json at install time:
|
|
6
|
+
*
|
|
7
|
+
* { "feature": "db" } db is installed
|
|
8
|
+
* { "feature": "db", "variant": "mongo" } db is installed with that variant
|
|
9
|
+
* { "feature": "auth", "not": true } auth is not installed
|
|
10
|
+
* [ {...}, {...} ] all of them (AND)
|
|
11
|
+
*
|
|
12
|
+
* Install order puts db and auth first. Adding them later needs
|
|
13
|
+
* `tailar sync <module>` so the predicate is evaluated again.
|
|
14
|
+
*
|
|
15
|
+
* `init` also passes the features selected for the same run ("planned"), so a
|
|
16
|
+
* file can already skip itself for a feature that installs later in the run
|
|
17
|
+
* (the ai module replaces the home page, for example).
|
|
18
|
+
*/
|
|
19
|
+
import type { ProjectConfig, WhenPredicate } from "../types/index.js";
|
|
20
|
+
/** True when there is no predicate, or every condition holds. */
|
|
21
|
+
export declare function evaluateWhen(when: WhenPredicate | undefined, config?: ProjectConfig | null, planned?: readonly string[]): boolean;
|
|
22
|
+
//# sourceMappingURL=when.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when.d.ts","sourceRoot":"","sources":["../../src/installers/when.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAiBrF,iEAAiE;AACjE,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,EAC7B,OAAO,GAAE,SAAS,MAAM,EAAO,GAC9B,OAAO,CAIT"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `when` predicate
|
|
3
|
+
*
|
|
4
|
+
* Registry file mappings and post-install steps can depend on what is already
|
|
5
|
+
* installed in the project, read from .tailar.json at install time:
|
|
6
|
+
*
|
|
7
|
+
* { "feature": "db" } db is installed
|
|
8
|
+
* { "feature": "db", "variant": "mongo" } db is installed with that variant
|
|
9
|
+
* { "feature": "auth", "not": true } auth is not installed
|
|
10
|
+
* [ {...}, {...} ] all of them (AND)
|
|
11
|
+
*
|
|
12
|
+
* Install order puts db and auth first. Adding them later needs
|
|
13
|
+
* `tailar sync <module>` so the predicate is evaluated again.
|
|
14
|
+
*
|
|
15
|
+
* `init` also passes the features selected for the same run ("planned"), so a
|
|
16
|
+
* file can already skip itself for a feature that installs later in the run
|
|
17
|
+
* (the ai module replaces the home page, for example).
|
|
18
|
+
*/
|
|
19
|
+
function matches(condition, config, planned = []) {
|
|
20
|
+
const installed = config?.installed?.features ?? [];
|
|
21
|
+
const found = installed.find((f) => f.name === condition.feature);
|
|
22
|
+
const present = (found !== undefined &&
|
|
23
|
+
(condition.variant === undefined || found.variant === condition.variant)) ||
|
|
24
|
+
// Selected for the same run but not installed yet (a variant cannot be known).
|
|
25
|
+
(condition.variant === undefined && planned.includes(condition.feature));
|
|
26
|
+
return condition.not ? !present : present;
|
|
27
|
+
}
|
|
28
|
+
/** True when there is no predicate, or every condition holds. */
|
|
29
|
+
export function evaluateWhen(when, config, planned = []) {
|
|
30
|
+
if (!when)
|
|
31
|
+
return true;
|
|
32
|
+
const conditions = Array.isArray(when) ? when : [when];
|
|
33
|
+
return conditions.every((condition) => matches(condition, config, planned));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=when.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when.js","sourceRoot":"","sources":["../../src/installers/when.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,SAAS,OAAO,CACd,SAAwB,EACxB,MAA6B,EAC7B,UAA6B,EAAE;IAE/B,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,EAAE,QAAQ,IAAI,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,OAAO,GACX,CAAC,KAAK,KAAK,SAAS;QAClB,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3E,+EAA+E;QAC/E,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAC1B,IAA+B,EAC/B,MAA6B,EAC7B,UAA6B,EAAE;IAE/B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9E,CAAC"}
|
package/dist/registry/query.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Functions for querying and filtering registry entries.
|
|
5
5
|
*/
|
|
6
|
-
import { Registry, RegistryEntry } from '../types/index.js';
|
|
6
|
+
import { ProjectConfig, Registry, RegistryEntry } from '../types/index.js';
|
|
7
7
|
/**
|
|
8
8
|
* Get a feature by name
|
|
9
9
|
*/
|
|
@@ -40,6 +40,11 @@ export declare function searchEntries(registry: Registry, query: string): Regist
|
|
|
40
40
|
* Get all feature dependencies for an entry (recursive)
|
|
41
41
|
*/
|
|
42
42
|
export declare function getFeatureDependencies(registry: Registry, entryName: string, visited?: Set<string>): string[];
|
|
43
|
+
/**
|
|
44
|
+
* Feature dependencies of an entry (nested ones included) that are not
|
|
45
|
+
* installed yet, ordered so each comes after the features it needs.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getMissingFeatureDependencies(registry: Registry, entryName: string, config: ProjectConfig | null | undefined): string[];
|
|
43
48
|
/**
|
|
44
49
|
* Check if an entry has a specific variant
|
|
45
50
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/registry/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/registry/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE3E;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEtF;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEpF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAExF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEvF;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAOpF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,GACnD,aAAa,EAAE,CAWjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAShF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAchF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,cAAoB,GAC1B,MAAM,EAAE,CAuBV;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GACvC,MAAM,EAAE,CAeV;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sDAEnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,EAAE,CAE3D"}
|
package/dist/registry/query.js
CHANGED
|
@@ -102,6 +102,28 @@ export function getFeatureDependencies(registry, entryName, visited = new Set())
|
|
|
102
102
|
// Return unique dependencies
|
|
103
103
|
return [...new Set(deps)];
|
|
104
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Feature dependencies of an entry (nested ones included) that are not
|
|
107
|
+
* installed yet, ordered so each comes after the features it needs.
|
|
108
|
+
*/
|
|
109
|
+
export function getMissingFeatureDependencies(registry, entryName, config) {
|
|
110
|
+
const ordered = [];
|
|
111
|
+
const seen = new Set([entryName]);
|
|
112
|
+
const visit = (name) => {
|
|
113
|
+
const entry = getEntry(registry, name);
|
|
114
|
+
for (const dep of entry?.featureDependencies ?? []) {
|
|
115
|
+
if (seen.has(dep))
|
|
116
|
+
continue;
|
|
117
|
+
seen.add(dep);
|
|
118
|
+
visit(dep);
|
|
119
|
+
const installed = config?.installed.features.some((f) => f.name === dep);
|
|
120
|
+
if (!installed)
|
|
121
|
+
ordered.push(dep);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
visit(entryName);
|
|
125
|
+
return ordered;
|
|
126
|
+
}
|
|
105
127
|
/**
|
|
106
128
|
* Check if an entry has a specific variant
|
|
107
129
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/registry/query.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/registry/query.ts"],"names":[],"mappings":"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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -70,6 +70,8 @@ export type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';
|
|
|
70
70
|
* Project context information
|
|
71
71
|
*/
|
|
72
72
|
export interface ProjectContext {
|
|
73
|
+
/** Features selected for the same run but not installed yet (`init`). */
|
|
74
|
+
plannedFeatures?: string[];
|
|
73
75
|
/** Project root directory */
|
|
74
76
|
root: string;
|
|
75
77
|
/** Package manager detected */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,SAAS,EAAE;QACT,0CAA0C;QAC1C,QAAQ,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,0BAA0B;QAC1B,MAAM,EAAE,KAAK,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,8BAA8B;QAC9B,UAAU,EAAE,KAAK,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,6BAA6B;QAC7B,SAAS,CAAC,EAAE,KAAK,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACJ,CAAC;IACF,kCAAkC;IAClC,SAAS,CAAC,EAAE;QACV,YAAY,EAAE,OAAO,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,oCAAoC;IACpC,SAAS,EAAE;QACT,YAAY,EAAE,OAAO,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,6BAA6B;IAC7B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,SAAS,EAAE;QACT,0CAA0C;QAC1C,QAAQ,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,0BAA0B;QAC1B,MAAM,EAAE,KAAK,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,8BAA8B;QAC9B,UAAU,EAAE,KAAK,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,6BAA6B;QAC7B,SAAS,CAAC,EAAE,KAAK,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACJ,CAAC;IACF,kCAAkC;IAClC,SAAS,CAAC,EAAE;QACV,YAAY,EAAE,OAAO,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,oCAAoC;IACpC,SAAS,EAAE;QACT,YAAY,EAAE,OAAO,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,6BAA6B;IAC7B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB"}
|
package/dist/types/registry.d.ts
CHANGED
|
@@ -8,8 +8,23 @@
|
|
|
8
8
|
* Strategy for handling file conflicts
|
|
9
9
|
* - override: Replace existing file (default)
|
|
10
10
|
* - merge: Merge with existing file (for JSON files)
|
|
11
|
+
* - managed: Replace only the `<!-- tailar:begin id -->` blocks of an existing
|
|
12
|
+
* file and keep every other line (for CLAUDE.md, AGENTS.md)
|
|
11
13
|
*/
|
|
12
|
-
export type FileConflictStrategy = "override" | "merge";
|
|
14
|
+
export type FileConflictStrategy = "override" | "merge" | "managed";
|
|
15
|
+
/**
|
|
16
|
+
* One installed-state test, evaluated against .tailar.json
|
|
17
|
+
*/
|
|
18
|
+
export interface WhenCondition {
|
|
19
|
+
/** Installed feature name, e.g. "db" or "auth" */
|
|
20
|
+
feature: string;
|
|
21
|
+
/** Required variant of that feature (e.g. "mongo"). Any variant when omitted */
|
|
22
|
+
variant?: string;
|
|
23
|
+
/** Invert the test: true when the feature (and variant) is NOT installed */
|
|
24
|
+
not?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** A condition, or a list of conditions that must all hold */
|
|
27
|
+
export type WhenPredicate = WhenCondition | WhenCondition[];
|
|
13
28
|
/**
|
|
14
29
|
* File mapping from source (in components package) to target (in user project)
|
|
15
30
|
*/
|
|
@@ -18,7 +33,12 @@ export interface FileMapping {
|
|
|
18
33
|
source: string;
|
|
19
34
|
/** Target file path relative to project root (supports {{variables}}) */
|
|
20
35
|
target: string;
|
|
21
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Install this file only when the predicate holds for the features already
|
|
38
|
+
* installed. Evaluated on every install and sync.
|
|
39
|
+
*/
|
|
40
|
+
when?: WhenPredicate;
|
|
41
|
+
/** Declared in the schema docs but not implemented by the CLI. Use `when`. */
|
|
22
42
|
condition?: string;
|
|
23
43
|
/** Strategy for handling file conflicts (default: override) */
|
|
24
44
|
strategy?: FileConflictStrategy;
|
|
@@ -72,6 +92,12 @@ export interface PostInstallStep {
|
|
|
72
92
|
command?: string;
|
|
73
93
|
/** Whether to skip if already exists */
|
|
74
94
|
skipIfExists?: boolean;
|
|
95
|
+
/** Run or show this step only when the predicate holds */
|
|
96
|
+
when?: WhenPredicate;
|
|
97
|
+
/** Registry entry the step came from (set by the installer, not the registry). */
|
|
98
|
+
source?: string;
|
|
99
|
+
/** Label of that entry, for the setup guide. */
|
|
100
|
+
sourceLabel?: string;
|
|
75
101
|
}
|
|
76
102
|
/**
|
|
77
103
|
* Prompt question for user input
|
|
@@ -152,14 +178,45 @@ export interface RegistryEntry {
|
|
|
152
178
|
variants?: Variant[];
|
|
153
179
|
/** Variant resolution configuration */
|
|
154
180
|
variantResolver?: VariantResolver;
|
|
181
|
+
/**
|
|
182
|
+
* Variant names from older versions of this entry, each with a message.
|
|
183
|
+
* An app that recorded one of them in .tailar.json cannot be synced or
|
|
184
|
+
* re-added until it is migrated and the variant is changed by hand.
|
|
185
|
+
*/
|
|
186
|
+
legacyVariants?: Record<string, string>;
|
|
155
187
|
/** Other features this depends on */
|
|
156
188
|
featureDependencies?: string[];
|
|
157
189
|
/** Tags for categorization */
|
|
158
190
|
tags?: string[];
|
|
159
|
-
/**
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
191
|
+
/**
|
|
192
|
+
* @deprecated Registries published before the single licence still carry
|
|
193
|
+
* `requiresSubscription` and `subscriptionTier`. The CLI ignores them: every
|
|
194
|
+
* entry needs the licence.
|
|
195
|
+
*/
|
|
196
|
+
requiresSubscription?: boolean;
|
|
197
|
+
/** @deprecated See `requiresSubscription`. Ignored. */
|
|
198
|
+
subscriptionTier?: number;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* A preset: a named starting point for `tailar init`.
|
|
202
|
+
* `modules` use wizard module ids (database, email, auth, payments, storage, ai),
|
|
203
|
+
* not registry feature names.
|
|
204
|
+
*/
|
|
205
|
+
export interface RegistryPreset {
|
|
206
|
+
/** Preset id used by `--preset` */
|
|
207
|
+
id: string;
|
|
208
|
+
label: string;
|
|
209
|
+
description: string;
|
|
210
|
+
/** Modules selected by default */
|
|
211
|
+
modules: string[];
|
|
212
|
+
/** Default providers (database, email, authStructure, payments, storage) */
|
|
213
|
+
providers?: Record<string, string>;
|
|
214
|
+
/** Extra registry entries (blocks, components) installed after the modules */
|
|
215
|
+
items?: string[];
|
|
216
|
+
/** Template applied last; skipped when its featureDependencies are not installed */
|
|
217
|
+
template?: string;
|
|
218
|
+
/** Registry features that must exist; the preset is shown as coming soon until they do */
|
|
219
|
+
requires?: string[];
|
|
163
220
|
}
|
|
164
221
|
/**
|
|
165
222
|
* Complete registry structure
|
|
@@ -181,5 +238,7 @@ export interface Registry {
|
|
|
181
238
|
components: RegistryEntry[];
|
|
182
239
|
/** Template entries */
|
|
183
240
|
templates?: RegistryEntry[];
|
|
241
|
+
/** Init presets (absent in older registries) */
|
|
242
|
+
presets?: RegistryPreset[];
|
|
184
243
|
}
|
|
185
244
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/types/wizard.d.ts
CHANGED
|
@@ -4,14 +4,15 @@
|
|
|
4
4
|
* Shared types for the Tailar init guided wizard.
|
|
5
5
|
*/
|
|
6
6
|
import type { PackageManager } from './config.js';
|
|
7
|
-
export type
|
|
8
|
-
export type CoreModuleId = 'database' | 'email' | 'auth' | 'payments';
|
|
9
|
-
export type ModuleId = CoreModuleId | '
|
|
7
|
+
export type PresetId = 'saas-ai' | 'saas' | 'marketing' | 'custom';
|
|
8
|
+
export type CoreModuleId = 'database' | 'email' | 'auth' | 'payments' | 'storage' | 'ai';
|
|
9
|
+
export type ModuleId = CoreModuleId | 'analytics';
|
|
10
10
|
/** Registry dbProvider values (not postgresql) */
|
|
11
11
|
export type DatabaseProvider = 'postgres' | 'mysql' | 'mongodb';
|
|
12
12
|
export type EmailProvider = 'resend' | 'postmark' | 'sendgrid';
|
|
13
13
|
export type AuthStructure = 'org-based' | 'user-based';
|
|
14
|
-
|
|
14
|
+
/** Registry payments variant (stripe, ...) */
|
|
15
|
+
export type PaymentsProvider = string;
|
|
15
16
|
export interface WizardProviders {
|
|
16
17
|
database?: DatabaseProvider;
|
|
17
18
|
email?: EmailProvider;
|
|
@@ -19,25 +20,50 @@ export interface WizardProviders {
|
|
|
19
20
|
/** Always Better Auth in init */
|
|
20
21
|
authProvider: 'better-auth';
|
|
21
22
|
payments?: PaymentsProvider;
|
|
23
|
+
/** Registry storage variant (r2, ...) */
|
|
24
|
+
storage?: string;
|
|
22
25
|
}
|
|
23
26
|
export interface TailarInitWizardState {
|
|
24
|
-
|
|
27
|
+
preset: PresetId;
|
|
25
28
|
projectName: string;
|
|
26
29
|
modules: CoreModuleId[];
|
|
27
30
|
providers: WizardProviders;
|
|
31
|
+
/** Extra registry entries installed after the modules (from the preset) */
|
|
32
|
+
items: string[];
|
|
33
|
+
/** Template applied last, if its featureDependencies are installed (from the preset) */
|
|
34
|
+
template?: string;
|
|
28
35
|
}
|
|
36
|
+
/** Install order of modules. */
|
|
37
|
+
export declare const MODULE_ORDER: readonly CoreModuleId[];
|
|
38
|
+
/** Registry feature that installs each module. */
|
|
39
|
+
export declare const MODULE_FEATURES: Record<CoreModuleId, string>;
|
|
29
40
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
41
|
+
* Direct module dependencies. Kept in step with `featureDependencies` in
|
|
42
|
+
* components/registry.json by test/wizard.test.ts; update both together.
|
|
43
|
+
*/
|
|
44
|
+
export declare const MODULE_REQUIRES: Record<CoreModuleId, readonly CoreModuleId[]>;
|
|
45
|
+
export declare function formatModuleLabel(id: CoreModuleId): string;
|
|
46
|
+
/**
|
|
47
|
+
* Normalize a module selection: every selected module pulls in what it
|
|
48
|
+
* requires (see MODULE_REQUIRES), so deselecting a dependency cannot leave a
|
|
49
|
+
* module that would not run.
|
|
32
50
|
*/
|
|
33
51
|
export declare function normalizeModuleSelection(raw: CoreModuleId[]): {
|
|
34
52
|
modules: CoreModuleId[];
|
|
35
53
|
autoNotes: string[];
|
|
36
54
|
};
|
|
55
|
+
export declare const ATTACHMENTS_HINT = "Chat attachments need the Storage module (it also installs Database and Auth).";
|
|
56
|
+
/**
|
|
57
|
+
* Advice about a module selection that is valid but leaves something out.
|
|
58
|
+
* Never changes the selection.
|
|
59
|
+
*/
|
|
60
|
+
export declare function moduleSelectionHints(modules: readonly CoreModuleId[]): string[];
|
|
37
61
|
export interface TailarInitWizardMeta {
|
|
38
|
-
|
|
62
|
+
preset: PresetId;
|
|
39
63
|
modules: CoreModuleId[];
|
|
40
64
|
providers: WizardProviders;
|
|
41
65
|
packageManager?: PackageManager;
|
|
66
|
+
/** Id of the website recipe the app was scaffolded from, if any */
|
|
67
|
+
recipe?: string;
|
|
42
68
|
}
|
|
43
69
|
//# sourceMappingURL=wizard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/types/wizard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/types/wizard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEnE,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,OAAO,GACP,MAAM,GACN,UAAU,GACV,SAAS,GACT,IAAI,CAAC;AAET,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;AAElD,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,YAAY,CAAC;AAEvD,8CAA8C;AAC9C,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,iCAAiC;IACjC,YAAY,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,QAAQ,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,eAAe,CAAC;IAC3B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,gCAAgC;AAChC,eAAO,MAAM,YAAY,EAAE,SAAS,YAAY,EAO/C,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAOxD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,YAAY,EAAE,CAOzE,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CAiB1D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG;IAC7D,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAuBA;AAED,eAAO,MAAM,gBAAgB,mFACqD,CAAC;AAEnF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,EAAE,CAM/E;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,QAAQ,CAAC;IACjB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,eAAe,CAAC;IAC3B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|