ember.nvp 1.9.0 → 1.10.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.
Files changed (43) hide show
  1. package/.release-plan.json +22 -4
  2. package/CHANGELOG.md +20 -0
  3. package/README.md +65 -4
  4. package/package.json +2 -1
  5. package/packages/rolldown/package.json +6 -2
  6. package/packages/rolldown/src/dts.test.ts +105 -1
  7. package/packages/rolldown/src/isolated-declarations.ts +67 -61
  8. package/packages/rolldown/src/transform.test.ts +212 -15
  9. package/packages/rolldown/src/transform.ts +106 -26
  10. package/src/cli/args.js +103 -14
  11. package/src/cli/generator.js +2 -1
  12. package/src/cli/help.js +66 -16
  13. package/src/cli/index.js +15 -0
  14. package/src/cli/questions/layer-options.js +130 -0
  15. package/src/cli/questions/validate-option.js +106 -0
  16. package/src/layers/eslint-bundled/app.test.ts +182 -0
  17. package/src/layers/eslint-bundled/index.js +172 -0
  18. package/src/layers/expect-type/index.js +11 -1
  19. package/src/layers/github-actions/app.test.ts +1 -1
  20. package/src/layers/typescript/app.test.ts +6 -0
  21. package/src/layers/typescript/index.js +48 -148
  22. package/src/layers/typescript/typescript-6.js +102 -0
  23. package/src/layers/typescript/typescript-7.js +177 -0
  24. package/src/utils/manifest.js +13 -0
  25. package/src/utils/npm.js +27 -0
  26. package/src/utils/project.js +23 -0
  27. package/src/utils/types.ts +52 -1
  28. package/src/utils/typescript.js +147 -0
  29. package/test/ember.nvp/base-library.test.ts +11 -0
  30. package/test/ember.nvp/cli.test.ts +86 -1
  31. package/test/ember.nvp/layer-options.test.ts +248 -0
  32. package/test/ember.nvp/layer-readme.test.ts +4 -2
  33. package/test/ember.nvp/layer-typescript.test.ts +302 -0
  34. package/test/ember.nvp/layers.test.ts +1 -2
  35. package/test/ember.nvp/permutations/shared.ts +3 -4
  36. package/test/ember.nvp/validate-option.test.ts +152 -0
  37. package/test/test-helpers/permutate.test.ts +2 -7
  38. package/test/test-helpers.ts +8 -1
  39. package/src/layers/eslint-bundled-ember/index.js +0 -91
  40. package/src/layers/eslint-bundled-nvp/app.test.ts +0 -91
  41. package/src/layers/eslint-bundled-nvp/index.js +0 -91
  42. /package/src/layers/{eslint-bundled-ember/files → eslint-bundled/files/ember}/eslint.config.js +0 -0
  43. /package/src/layers/{eslint-bundled-nvp/files → eslint-bundled/files/nvp}/eslint.config.js +0 -0
@@ -1,91 +0,0 @@
1
- import { beforeAll, describe, it, expect as hardExpect, afterAll } from "vitest";
2
- import { expectIsSetup, generate, layers, reapply } from "#test-helpers";
3
-
4
- import type { Project } from "ember.nvp";
5
- import { rm } from "node:fs/promises";
6
-
7
- const expect = hardExpect.soft;
8
-
9
- let layer = layers.find((layer) => layer.name === "eslint-bundled-nvp")!;
10
-
11
- describe("starting without eslint-bundled-nvp", () => {
12
- let project: Project;
13
-
14
- beforeAll(async () => {
15
- project = await generate({
16
- type: "app",
17
- packageManager: "pnpm",
18
- layers: ["git"],
19
- });
20
- });
21
-
22
- afterAll(async () => {
23
- await rm(project.directory, { recursive: true, force: true });
24
- });
25
-
26
- it("applying eslint-bundled-nvp", async () => {
27
- await reapply(project, ["eslint-bundled-nvp"]);
28
-
29
- await expectIsSetup(project, layer);
30
- expect(await project.gitHasDiff()).toBe(false);
31
- });
32
- });
33
-
34
- describe("starting with eslint-bundled-nvp", () => {
35
- let project: Project;
36
-
37
- beforeAll(async () => {
38
- project = await generate({
39
- type: "app",
40
- packageManager: "pnpm",
41
- layers: ["eslint-bundled-nvp", "git"],
42
- });
43
- });
44
-
45
- afterAll(async () => {
46
- await rm(project.directory, { recursive: true, force: true });
47
- });
48
-
49
- it("reapplying eslint-bundled-nvp causes no changes", async () => {
50
- await reapply(project, ["eslint-bundled-nvp"]);
51
-
52
- await expectIsSetup(project, layer);
53
- expect(await project.gitHasDiff()).toBe(false);
54
- });
55
- });
56
-
57
- describe("package.json scripts", () => {
58
- let project: Project;
59
-
60
- beforeAll(async () => {
61
- project = await generate({
62
- type: "app",
63
- packageManager: "pnpm",
64
- layers: ["eslint-bundled-nvp", "git"],
65
- });
66
-
67
- let { exitCode } = await project.run("pnpm install");
68
-
69
- hardExpect(exitCode).toBe(0);
70
-
71
- await expectIsSetup(project, layer);
72
- });
73
-
74
- afterAll(async () => {
75
- await rm(project.directory, { recursive: true, force: true });
76
- });
77
-
78
- it("linting and fixing works", async () => {
79
- {
80
- let { exitCode } = await project.run("pnpm lint:eslint --fix");
81
-
82
- expect(exitCode).toBe(0);
83
- }
84
-
85
- {
86
- let { exitCode } = await project.run("pnpm lint:eslint");
87
-
88
- expect(exitCode).toBe(0);
89
- }
90
- });
91
- });
@@ -1,91 +0,0 @@
1
- import { getLatest } from "#utils/npm.js";
2
- import { files, packageJson } from "ember-apply";
3
- import { formatLabel } from "#utils/cli.js";
4
- import { maybeLintWithConcurrently } from "#consolidators/linting.js";
5
- import { existsSync } from "node:fs";
6
- import { join } from "node:path";
7
- import { hasDevDeps } from "#utils/manifest.js";
8
-
9
- /**
10
- * @type {import('#types').Layer}
11
- */
12
- export default {
13
- label: formatLabel("ESLint", "NullVoxPopuli's encapsulated config"),
14
- hint: `Minimal dependencies added to package.json`,
15
-
16
- async run(project) {
17
- await files.applyFolder(join(import.meta.dirname, "files"), project.directory);
18
-
19
- await packageJson.addDevDependencies(
20
- await getLatest({
21
- "@nullvoxpopuli/eslint-configs": "^7.0.0",
22
- eslint: "^10.9.1",
23
- }),
24
- project.directory,
25
- );
26
-
27
- await packageJson.addScripts(
28
- {
29
- "lint:eslint": "eslint . --cache",
30
- "lint:eslint:fix": "eslint . --fix",
31
- },
32
- project.directory,
33
- );
34
-
35
- await maybeLintWithConcurrently(project);
36
- },
37
-
38
- /**
39
- * @overload
40
- * @param {import('#utils/project.js').Project} project
41
- * @param {true} explain
42
- * @returns {Promise<{ isSetup: boolean; reasons: string[] }>}
43
- */
44
- /**
45
- * @overload
46
- * @param {import('#utils/project.js').Project} project
47
- * @param {boolean | undefined} [explain]
48
- * @returns {Promise<boolean>}
49
- */
50
- async isSetup(project, explain) {
51
- const reasons = [];
52
-
53
- if (!existsSync(join(project.directory, "eslint.config.js"))) {
54
- reasons.push("eslint.config.js is missing");
55
-
56
- if (!explain) return false;
57
- }
58
-
59
- let manifest = await packageJson.read(project.directory);
60
-
61
- if (!hasDevDeps(manifest, ["@nullvoxpopuli/eslint-configs", "eslint"])) {
62
- reasons.push("missing required dependencies: @nullvoxpopuli/eslint-configs, eslint");
63
-
64
- if (!explain) return false;
65
- }
66
-
67
- let scripts = Object.values(manifest.scripts ?? {}).filter((script) =>
68
- script.includes("eslint"),
69
- );
70
-
71
- if (!scripts.some((script) => script.includes("--cache"))) {
72
- reasons.push("missing eslint script with --cache flag");
73
-
74
- if (!explain) return false;
75
- }
76
- if (!scripts.some((script) => script.includes("--fix"))) {
77
- reasons.push("missing eslint script with --fix flag");
78
-
79
- if (!explain) return false;
80
- }
81
-
82
- if (explain) {
83
- return {
84
- isSetup: reasons.length === 0,
85
- reasons,
86
- };
87
- }
88
-
89
- return reasons.length === 0;
90
- },
91
- };