@fluixi/cli 0.1.0-alpha.82 → 0.1.0-alpha.84
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 +21 -3
- package/dist/add.cjs +590 -0
- package/dist/add.d.ts +10 -0
- package/dist/add.d.ts.map +1 -0
- package/dist/add.js +107 -0
- package/dist/add.mjs +562 -0
- package/dist/check.cjs +102 -0
- package/dist/check.d.ts +13 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +88 -0
- package/dist/check.mjs +76 -0
- package/dist/cli.cjs +977 -78
- package/dist/cli.js +44 -2
- package/dist/cli.mjs +976 -77
- package/dist/doctor.cjs +119 -0
- package/dist/doctor.d.ts +13 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +114 -0
- package/dist/doctor.mjs +92 -0
- package/dist/generate.cjs +614 -65
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +118 -48
- package/dist/generate.mjs +619 -64
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/report.cjs +54 -0
- package/dist/report.d.ts +5 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +31 -0
- package/dist/report.mjs +28 -0
- package/dist/scaffold/auth.cjs +422 -0
- package/dist/scaffold/auth.d.ts +39 -0
- package/dist/scaffold/auth.d.ts.map +1 -0
- package/dist/scaffold/auth.js +137 -0
- package/dist/scaffold/auth.mjs +389 -0
- package/dist/scaffold/edit.cjs +153 -0
- package/dist/scaffold/edit.d.ts +35 -0
- package/dist/scaffold/edit.d.ts.map +1 -0
- package/dist/scaffold/edit.js +140 -0
- package/dist/scaffold/edit.mjs +124 -0
- package/dist/scaffold/index.cjs +610 -0
- package/dist/scaffold/index.d.ts +10 -0
- package/dist/scaffold/index.d.ts.map +1 -0
- package/dist/scaffold/index.js +9 -0
- package/dist/scaffold/index.mjs +569 -0
- package/dist/scaffold/prompt.cjs +108 -0
- package/dist/scaffold/prompt.d.ts +9 -0
- package/dist/scaffold/prompt.d.ts.map +1 -0
- package/dist/scaffold/prompt.js +95 -0
- package/dist/scaffold/prompt.mjs +81 -0
- package/dist/scaffold/templates.cjs +274 -0
- package/dist/scaffold/templates.d.ts +26 -0
- package/dist/scaffold/templates.d.ts.map +1 -0
- package/dist/scaffold/templates.js +216 -0
- package/dist/scaffold/templates.mjs +229 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +19 -3
package/dist/doctor.cjs
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/doctor.ts
|
|
21
|
+
var doctor_exports = {};
|
|
22
|
+
__export(doctor_exports, {
|
|
23
|
+
diagnose: () => diagnose,
|
|
24
|
+
installedCopies: () => installedCopies,
|
|
25
|
+
resolvedVersions: () => resolvedVersions
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(doctor_exports);
|
|
28
|
+
var import_node_fs = require("node:fs");
|
|
29
|
+
var import_node_module = require("node:module");
|
|
30
|
+
var import_node_path = require("node:path");
|
|
31
|
+
var readJson = (file) => JSON.parse((0, import_node_fs.readFileSync)(file, "utf8"));
|
|
32
|
+
function resolvedVersions(root) {
|
|
33
|
+
const out = {};
|
|
34
|
+
const scope = (0, import_node_path.join)(root, "node_modules/@fluixi");
|
|
35
|
+
if (!(0, import_node_fs.existsSync)(scope)) return out;
|
|
36
|
+
for (const name of (0, import_node_fs.readdirSync)(scope).sort()) {
|
|
37
|
+
const file = (0, import_node_path.join)(scope, name, "package.json");
|
|
38
|
+
if ((0, import_node_fs.existsSync)(file)) out[`@fluixi/${name}`] = readJson(file).version;
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
function installedCopies(root) {
|
|
43
|
+
const found = /* @__PURE__ */ new Map();
|
|
44
|
+
const seen = /* @__PURE__ */ new Set();
|
|
45
|
+
const add = (dir) => {
|
|
46
|
+
const file = (0, import_node_path.join)(dir, "package.json");
|
|
47
|
+
if (!(0, import_node_fs.existsSync)(file)) return;
|
|
48
|
+
const real = (0, import_node_fs.realpathSync)(dir);
|
|
49
|
+
if (seen.has(real)) return;
|
|
50
|
+
seen.add(real);
|
|
51
|
+
const { name, version } = readJson(file);
|
|
52
|
+
if (!found.has(name)) found.set(name, /* @__PURE__ */ new Set());
|
|
53
|
+
found.get(name).add(version);
|
|
54
|
+
};
|
|
55
|
+
const scan = (modules, depth) => {
|
|
56
|
+
const scope = (0, import_node_path.join)(modules, "@fluixi");
|
|
57
|
+
if ((0, import_node_fs.existsSync)(scope)) {
|
|
58
|
+
for (const name of (0, import_node_fs.readdirSync)(scope)) {
|
|
59
|
+
add((0, import_node_path.join)(scope, name));
|
|
60
|
+
if (depth > 0) scan((0, import_node_path.join)(scope, name, "node_modules"), depth - 1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const top = (0, import_node_path.join)(root, "node_modules");
|
|
65
|
+
scan(top, 2);
|
|
66
|
+
const store = (0, import_node_path.join)(top, ".pnpm");
|
|
67
|
+
if ((0, import_node_fs.existsSync)(store)) {
|
|
68
|
+
for (const entry of (0, import_node_fs.readdirSync)(store)) {
|
|
69
|
+
if (entry.startsWith("@fluixi+")) scan((0, import_node_path.join)(store, entry, "node_modules"), 0);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return Object.fromEntries([...found].map(([k, v]) => [k, [...v].sort()]));
|
|
73
|
+
}
|
|
74
|
+
function pluginConfigured(root) {
|
|
75
|
+
const file = (0, import_node_path.join)(root, "tsconfig.json");
|
|
76
|
+
if (!(0, import_node_fs.existsSync)(file)) return null;
|
|
77
|
+
let config;
|
|
78
|
+
try {
|
|
79
|
+
const ts = (0, import_node_module.createRequire)((0, import_node_path.join)(root, "package.json"))("typescript");
|
|
80
|
+
config = ts.readConfigFile(file, ts.sys.readFile).config;
|
|
81
|
+
} catch {
|
|
82
|
+
try {
|
|
83
|
+
config = readJson(file);
|
|
84
|
+
} catch {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return (config?.compilerOptions?.plugins ?? []).some((p) => p.name === "@fluixi/ts-plugin");
|
|
89
|
+
}
|
|
90
|
+
function diagnose(root) {
|
|
91
|
+
const problems = [];
|
|
92
|
+
for (const [name, versions] of Object.entries(installedCopies(root))) {
|
|
93
|
+
if (versions.length > 1) {
|
|
94
|
+
problems.push({ severity: "error", message: `${name} is installed ${versions.length} times (${versions.join(", ")}); each copy keeps its own state` });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const pkg = (0, import_node_fs.existsSync)((0, import_node_path.join)(root, "package.json")) ? readJson((0, import_node_path.join)(root, "package.json")) : {};
|
|
98
|
+
const declared = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
99
|
+
const prerelease = Object.entries(declared).filter(([n]) => n.startsWith("@fluixi/")).map(([, v]) => v.match(/-(alpha|beta|rc)\.\d+/)?.[1]).filter(Boolean);
|
|
100
|
+
if (new Set(prerelease).size > 1) {
|
|
101
|
+
problems.push({ severity: "warning", message: `@fluixi/* dependencies mix prerelease tags (${[...new Set(prerelease)].join(", ")})` });
|
|
102
|
+
}
|
|
103
|
+
const plugin = pluginConfigured(root);
|
|
104
|
+
if (plugin === false) {
|
|
105
|
+
problems.push({
|
|
106
|
+
severity: "warning",
|
|
107
|
+
message: 'tsconfig.json does not load @fluixi/ts-plugin: the editor shows no env or auth warnings. Add { "name": "@fluixi/ts-plugin" } to compilerOptions.plugins'
|
|
108
|
+
});
|
|
109
|
+
} else if (plugin && !(0, import_node_fs.existsSync)((0, import_node_path.join)(root, "node_modules/@fluixi/ts-plugin"))) {
|
|
110
|
+
problems.push({ severity: "warning", message: "tsconfig.json names @fluixi/ts-plugin, which is not installed" });
|
|
111
|
+
}
|
|
112
|
+
return problems;
|
|
113
|
+
}
|
|
114
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
115
|
+
0 && (module.exports = {
|
|
116
|
+
diagnose,
|
|
117
|
+
installedCopies,
|
|
118
|
+
resolvedVersions
|
|
119
|
+
});
|
package/dist/doctor.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface Problem {
|
|
2
|
+
severity: 'error' | 'warning';
|
|
3
|
+
message: string;
|
|
4
|
+
}
|
|
5
|
+
/** Each `@fluixi/*` package the app resolves, with its version. */
|
|
6
|
+
export declare function resolvedVersions(root: string): Record<string, string>;
|
|
7
|
+
/**
|
|
8
|
+
* Every distinct copy of each `@fluixi/*` package installed under the app: pnpm's store
|
|
9
|
+
* directories, and npm's nested `node_modules`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function installedCopies(root: string): Record<string, string[]>;
|
|
12
|
+
export declare function diagnose(root: string): Problem[];
|
|
13
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASrE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA+BtE;AAoBD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CA4BhD"}
|
package/dist/doctor.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `fluixi doctor`: the install problems that make an app behave unlike its source.
|
|
3
|
+
*
|
|
4
|
+
* Two copies of a package mean two sets of module state: a signal written through one is not
|
|
5
|
+
* seen through the other, and an injection token registered in one is missing in the other.
|
|
6
|
+
* Nothing fails loudly. A missing editor plugin is quieter still: the env and auth rules
|
|
7
|
+
* never run.
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, readdirSync, readFileSync, realpathSync } from 'node:fs';
|
|
10
|
+
import { createRequire } from 'node:module';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
const readJson = (file) => JSON.parse(readFileSync(file, 'utf8'));
|
|
13
|
+
/** Each `@fluixi/*` package the app resolves, with its version. */
|
|
14
|
+
export function resolvedVersions(root) {
|
|
15
|
+
const out = {};
|
|
16
|
+
const scope = join(root, 'node_modules/@fluixi');
|
|
17
|
+
if (!existsSync(scope))
|
|
18
|
+
return out;
|
|
19
|
+
for (const name of readdirSync(scope).sort()) {
|
|
20
|
+
const file = join(scope, name, 'package.json');
|
|
21
|
+
if (existsSync(file))
|
|
22
|
+
out[`@fluixi/${name}`] = readJson(file).version;
|
|
23
|
+
}
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Every distinct copy of each `@fluixi/*` package installed under the app: pnpm's store
|
|
28
|
+
* directories, and npm's nested `node_modules`.
|
|
29
|
+
*/
|
|
30
|
+
export function installedCopies(root) {
|
|
31
|
+
const found = new Map();
|
|
32
|
+
const seen = new Set();
|
|
33
|
+
const add = (dir) => {
|
|
34
|
+
const file = join(dir, 'package.json');
|
|
35
|
+
if (!existsSync(file))
|
|
36
|
+
return;
|
|
37
|
+
const real = realpathSync(dir);
|
|
38
|
+
if (seen.has(real))
|
|
39
|
+
return;
|
|
40
|
+
seen.add(real);
|
|
41
|
+
const { name, version } = readJson(file);
|
|
42
|
+
if (!found.has(name))
|
|
43
|
+
found.set(name, new Set());
|
|
44
|
+
found.get(name).add(version);
|
|
45
|
+
};
|
|
46
|
+
const scan = (modules, depth) => {
|
|
47
|
+
const scope = join(modules, '@fluixi');
|
|
48
|
+
if (existsSync(scope)) {
|
|
49
|
+
for (const name of readdirSync(scope)) {
|
|
50
|
+
add(join(scope, name));
|
|
51
|
+
if (depth > 0)
|
|
52
|
+
scan(join(scope, name, 'node_modules'), depth - 1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const top = join(root, 'node_modules');
|
|
57
|
+
scan(top, 2);
|
|
58
|
+
const store = join(top, '.pnpm');
|
|
59
|
+
if (existsSync(store)) {
|
|
60
|
+
for (const entry of readdirSync(store)) {
|
|
61
|
+
if (entry.startsWith('@fluixi+'))
|
|
62
|
+
scan(join(store, entry, 'node_modules'), 0);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return Object.fromEntries([...found].map(([k, v]) => [k, [...v].sort()]));
|
|
66
|
+
}
|
|
67
|
+
/** Whether tsconfig names the ts-plugin, read through the app's TypeScript for its comment syntax. */
|
|
68
|
+
function pluginConfigured(root) {
|
|
69
|
+
const file = join(root, 'tsconfig.json');
|
|
70
|
+
if (!existsSync(file))
|
|
71
|
+
return null;
|
|
72
|
+
let config;
|
|
73
|
+
try {
|
|
74
|
+
const ts = createRequire(join(root, 'package.json'))('typescript');
|
|
75
|
+
config = ts.readConfigFile(file, ts.sys.readFile).config;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
try {
|
|
79
|
+
config = readJson(file);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return (config?.compilerOptions?.plugins ?? []).some((p) => p.name === '@fluixi/ts-plugin');
|
|
86
|
+
}
|
|
87
|
+
export function diagnose(root) {
|
|
88
|
+
const problems = [];
|
|
89
|
+
for (const [name, versions] of Object.entries(installedCopies(root))) {
|
|
90
|
+
if (versions.length > 1) {
|
|
91
|
+
problems.push({ severity: 'error', message: `${name} is installed ${versions.length} times (${versions.join(', ')}); each copy keeps its own state` });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const pkg = existsSync(join(root, 'package.json')) ? readJson(join(root, 'package.json')) : {};
|
|
95
|
+
const declared = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
96
|
+
const prerelease = Object.entries(declared)
|
|
97
|
+
.filter(([n]) => n.startsWith('@fluixi/'))
|
|
98
|
+
.map(([, v]) => v.match(/-(alpha|beta|rc)\.\d+/)?.[1])
|
|
99
|
+
.filter(Boolean);
|
|
100
|
+
if (new Set(prerelease).size > 1) {
|
|
101
|
+
problems.push({ severity: 'warning', message: `@fluixi/* dependencies mix prerelease tags (${[...new Set(prerelease)].join(', ')})` });
|
|
102
|
+
}
|
|
103
|
+
const plugin = pluginConfigured(root);
|
|
104
|
+
if (plugin === false) {
|
|
105
|
+
problems.push({
|
|
106
|
+
severity: 'warning',
|
|
107
|
+
message: 'tsconfig.json does not load @fluixi/ts-plugin: the editor shows no env or auth warnings. Add { "name": "@fluixi/ts-plugin" } to compilerOptions.plugins',
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
else if (plugin && !existsSync(join(root, 'node_modules/@fluixi/ts-plugin'))) {
|
|
111
|
+
problems.push({ severity: 'warning', message: 'tsconfig.json names @fluixi/ts-plugin, which is not installed' });
|
|
112
|
+
}
|
|
113
|
+
return problems;
|
|
114
|
+
}
|
package/dist/doctor.mjs
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// src/doctor.ts
|
|
2
|
+
import { existsSync, readdirSync, readFileSync, realpathSync } from "node:fs";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
var readJson = (file) => JSON.parse(readFileSync(file, "utf8"));
|
|
6
|
+
function resolvedVersions(root) {
|
|
7
|
+
const out = {};
|
|
8
|
+
const scope = join(root, "node_modules/@fluixi");
|
|
9
|
+
if (!existsSync(scope)) return out;
|
|
10
|
+
for (const name of readdirSync(scope).sort()) {
|
|
11
|
+
const file = join(scope, name, "package.json");
|
|
12
|
+
if (existsSync(file)) out[`@fluixi/${name}`] = readJson(file).version;
|
|
13
|
+
}
|
|
14
|
+
return out;
|
|
15
|
+
}
|
|
16
|
+
function installedCopies(root) {
|
|
17
|
+
const found = /* @__PURE__ */ new Map();
|
|
18
|
+
const seen = /* @__PURE__ */ new Set();
|
|
19
|
+
const add = (dir) => {
|
|
20
|
+
const file = join(dir, "package.json");
|
|
21
|
+
if (!existsSync(file)) return;
|
|
22
|
+
const real = realpathSync(dir);
|
|
23
|
+
if (seen.has(real)) return;
|
|
24
|
+
seen.add(real);
|
|
25
|
+
const { name, version } = readJson(file);
|
|
26
|
+
if (!found.has(name)) found.set(name, /* @__PURE__ */ new Set());
|
|
27
|
+
found.get(name).add(version);
|
|
28
|
+
};
|
|
29
|
+
const scan = (modules, depth) => {
|
|
30
|
+
const scope = join(modules, "@fluixi");
|
|
31
|
+
if (existsSync(scope)) {
|
|
32
|
+
for (const name of readdirSync(scope)) {
|
|
33
|
+
add(join(scope, name));
|
|
34
|
+
if (depth > 0) scan(join(scope, name, "node_modules"), depth - 1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const top = join(root, "node_modules");
|
|
39
|
+
scan(top, 2);
|
|
40
|
+
const store = join(top, ".pnpm");
|
|
41
|
+
if (existsSync(store)) {
|
|
42
|
+
for (const entry of readdirSync(store)) {
|
|
43
|
+
if (entry.startsWith("@fluixi+")) scan(join(store, entry, "node_modules"), 0);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return Object.fromEntries([...found].map(([k, v]) => [k, [...v].sort()]));
|
|
47
|
+
}
|
|
48
|
+
function pluginConfigured(root) {
|
|
49
|
+
const file = join(root, "tsconfig.json");
|
|
50
|
+
if (!existsSync(file)) return null;
|
|
51
|
+
let config;
|
|
52
|
+
try {
|
|
53
|
+
const ts = createRequire(join(root, "package.json"))("typescript");
|
|
54
|
+
config = ts.readConfigFile(file, ts.sys.readFile).config;
|
|
55
|
+
} catch {
|
|
56
|
+
try {
|
|
57
|
+
config = readJson(file);
|
|
58
|
+
} catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return (config?.compilerOptions?.plugins ?? []).some((p) => p.name === "@fluixi/ts-plugin");
|
|
63
|
+
}
|
|
64
|
+
function diagnose(root) {
|
|
65
|
+
const problems = [];
|
|
66
|
+
for (const [name, versions] of Object.entries(installedCopies(root))) {
|
|
67
|
+
if (versions.length > 1) {
|
|
68
|
+
problems.push({ severity: "error", message: `${name} is installed ${versions.length} times (${versions.join(", ")}); each copy keeps its own state` });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const pkg = existsSync(join(root, "package.json")) ? readJson(join(root, "package.json")) : {};
|
|
72
|
+
const declared = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
73
|
+
const prerelease = Object.entries(declared).filter(([n]) => n.startsWith("@fluixi/")).map(([, v]) => v.match(/-(alpha|beta|rc)\.\d+/)?.[1]).filter(Boolean);
|
|
74
|
+
if (new Set(prerelease).size > 1) {
|
|
75
|
+
problems.push({ severity: "warning", message: `@fluixi/* dependencies mix prerelease tags (${[...new Set(prerelease)].join(", ")})` });
|
|
76
|
+
}
|
|
77
|
+
const plugin = pluginConfigured(root);
|
|
78
|
+
if (plugin === false) {
|
|
79
|
+
problems.push({
|
|
80
|
+
severity: "warning",
|
|
81
|
+
message: 'tsconfig.json does not load @fluixi/ts-plugin: the editor shows no env or auth warnings. Add { "name": "@fluixi/ts-plugin" } to compilerOptions.plugins'
|
|
82
|
+
});
|
|
83
|
+
} else if (plugin && !existsSync(join(root, "node_modules/@fluixi/ts-plugin"))) {
|
|
84
|
+
problems.push({ severity: "warning", message: "tsconfig.json names @fluixi/ts-plugin, which is not installed" });
|
|
85
|
+
}
|
|
86
|
+
return problems;
|
|
87
|
+
}
|
|
88
|
+
export {
|
|
89
|
+
diagnose,
|
|
90
|
+
installedCopies,
|
|
91
|
+
resolvedVersions
|
|
92
|
+
};
|