ember.nvp 0.6.0 → 0.7.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 (85) hide show
  1. package/.github/workflows/ci.yml +17 -2
  2. package/.release-plan.json +88 -4
  3. package/CHANGELOG.md +57 -0
  4. package/package.json +3 -2
  5. package/packages/build-tooling-utils/README.md +37 -0
  6. package/packages/build-tooling-utils/index.ts +2 -0
  7. package/packages/build-tooling-utils/package.json +42 -0
  8. package/packages/build-tooling-utils/rolldown.config.js +18 -0
  9. package/packages/build-tooling-utils/src/extensions.ts +18 -0
  10. package/packages/build-tooling-utils/src/maybe-babel.ts +146 -0
  11. package/packages/rolldown/README.md +115 -0
  12. package/packages/rolldown/index.ts +56 -0
  13. package/packages/rolldown/package.json +59 -0
  14. package/packages/rolldown/rolldown.config.js +21 -0
  15. package/packages/rolldown/src/babel.ts +136 -0
  16. package/packages/rolldown/src/define-config.ts +32 -0
  17. package/packages/rolldown/src/externals.ts +83 -0
  18. package/packages/rolldown/src/isolated-declarations.ts +65 -0
  19. package/packages/rolldown/src/transform.ts +162 -0
  20. package/packages/vite/README.md +7 -21
  21. package/packages/vite/index.ts +1 -1
  22. package/packages/vite/package.json +4 -6
  23. package/packages/vite/src/ember.ts +129 -15
  24. package/packages/vite/src/test-html.ts +86 -0
  25. package/src/bases/minimal-app/files/app/router.ts +1 -0
  26. package/src/bases/minimal-app/files/tsconfig.json +1 -0
  27. package/src/bases/minimal-app/index.js +2 -2
  28. package/src/bases/minimal-library/files/README.md +41 -0
  29. package/src/bases/minimal-library/files/package.json +49 -0
  30. package/src/bases/minimal-library/files/tsconfig.json +10 -0
  31. package/src/bases/minimal-library/files/tsdown.config.js +6 -0
  32. package/src/bases/minimal-library/index.js +158 -2
  33. package/src/cli/index.js +21 -2
  34. package/src/cli/questions/layers.js +5 -2
  35. package/src/cli/questions/project-type.js +0 -5
  36. package/src/layers/are-the-types-wrong/index.js +74 -0
  37. package/src/layers/git/files/gitignore +14 -1
  38. package/src/layers/git/index.js +6 -5
  39. package/src/layers/github-actions/index.js +12 -8
  40. package/src/layers/index.js +1 -1
  41. package/src/layers/inspector-support/index.js +101 -0
  42. package/src/layers/prettier/files/.prettierignore +4 -0
  43. package/src/layers/publint/index.js +68 -0
  44. package/src/layers/qunit/files/tests/unit/macros-test.ts +2 -2
  45. package/src/layers/qunit/index.js +107 -7
  46. package/src/layers/qunit/library-files/config/test/babel.config.js +41 -0
  47. package/src/layers/qunit/library-files/config/test/testem.cjs +26 -0
  48. package/src/layers/qunit/library-files/tests/test-helper.ts +36 -0
  49. package/src/layers/qunit/library-files/tests/unit/.gitkeep +0 -0
  50. package/src/layers/qunit/library-files/vite.config.mjs +6 -0
  51. package/src/layers/typescript/index.js +43 -7
  52. package/src/layers/vitest/files/vitest.config.mjs +11 -11
  53. package/src/layers/vitest/index.js +70 -32
  54. package/src/utils/babel.js +9 -6
  55. package/src/utils/fs.js +44 -3
  56. package/src/utils/inspector-support.js +196 -0
  57. package/src/utils/npm.js +21 -7
  58. package/src/utils/remove-types.js +5 -0
  59. package/src/utils/rewrite-imports.js +157 -0
  60. package/src/utils/tsdown-config.js +85 -0
  61. package/src/utils/types.ts +5 -1
  62. package/test/ember.nvp/base-library.test.ts +232 -0
  63. package/test/ember.nvp/generator-replace-or-update.test.ts +2 -3
  64. package/test/ember.nvp/inspector-support.test.ts +179 -0
  65. package/test/ember.nvp/layer-inspector-support.test.ts +69 -0
  66. package/test/ember.nvp/layer-publish-checks.test.ts +103 -0
  67. package/test/ember.nvp/layer-qunit.test.ts +376 -15
  68. package/test/ember.nvp/layer-vitest.test.ts +250 -0
  69. package/test/ember.nvp/layers.test.ts +16 -0
  70. package/test/ember.nvp/library-src-fixtures.ts +81 -0
  71. package/test/ember.nvp/permutations/app-1.test.ts +3 -0
  72. package/test/ember.nvp/permutations/app-2.test.ts +3 -0
  73. package/test/ember.nvp/permutations/library-1.test.ts +3 -0
  74. package/test/ember.nvp/permutations/library-2.test.ts +3 -0
  75. package/test/ember.nvp/permutations/shared.ts +239 -0
  76. package/test/ember.nvp/rewrite-imports.test.ts +235 -0
  77. package/test/test-helpers/permutate.test.ts +17 -0
  78. package/test/test-helpers.ts +20 -7
  79. package/tsconfig.json +1 -0
  80. package/packages/vite/src/maybe-babel.ts +0 -219
  81. package/src/layers/qunit/files/run-tests.mjs +0 -30
  82. package/src/layers/vitest/files/tests/test-helper.ts +0 -5
  83. package/test/ember.nvp/permutations.test.ts +0 -200
  84. /package/src/{layers/vitest/files/tests/integration/.gitkeep → bases/minimal-library/files/src/index.ts} +0 -0
  85. /package/src/layers/{vitest/files/tests/unit → qunit/library-files/tests/rendering}/.gitkeep +0 -0
@@ -1,200 +0,0 @@
1
- import { beforeAll, describe, it, expect, afterAll } from "vitest";
2
- import { generate, permutate, bases, layers, reapply } from "#test-helpers";
3
- import { TODO } from "#layers";
4
-
5
- import type { Project } from "ember.nvp";
6
- import { rimraf } from "rimraf";
7
-
8
- let permutations = permutate(layers.map((layer) => layer.name));
9
-
10
- const baseline = "<baseline>";
11
- permutations.push([baseline]);
12
-
13
- const RE_APPLY_ONLY = new Set<string>([
14
- // "typescript"
15
- // "renovate",
16
- // "github-actions",
17
- ]);
18
- const INITIAL_ONLY = new Set<string>([
19
- // baseline,
20
- // "eslint-bundled-nvp",
21
- // "typescript"
22
- ]);
23
-
24
- const eachBase = bases
25
- .map((base) => ({ name: base }))
26
- .filter(({ name }) => {
27
- if (name === "minimal-library") {
28
- /** TODO **/
29
- return false;
30
- }
31
-
32
- return true;
33
- });
34
- const eachPermutation = permutations
35
- .filter((permutation) => {
36
- if (INITIAL_ONLY.size > 0 && !permutation.some((x) => INITIAL_ONLY.has(x))) {
37
- return;
38
- }
39
-
40
- // Not implemented yet
41
- if (permutation.some((x) => TODO.has(x))) {
42
- return;
43
- }
44
-
45
- return true;
46
- })
47
- .map((permutation) => ({ permutation, name: permutation.join(", ") }));
48
-
49
- describe.each(eachBase)("$name", ({ name: base }) => {
50
- describe.each(eachPermutation)("layers: $name", ({ permutation }) => {
51
- let project: Project;
52
- let layerNames = permutation.filter((x) => x !== baseline);
53
- let startingLayers = layers.filter((layer) => layerNames.includes(layer.name));
54
-
55
- beforeAll(async () => {
56
- project = await generate({
57
- type: base === "minimal-app" ? "app" : "library",
58
- layers: layerNames,
59
- });
60
- });
61
-
62
- afterAll(async () => {
63
- if (process.env.CI) {
64
- return;
65
- }
66
-
67
- if (project?.directory) {
68
- await rimraf(project.directory, { maxRetries: 3, retryDelay: 100 });
69
- }
70
- });
71
-
72
- it("successfully setup the layers", async () => {
73
- if (startingLayers.length === 0) {
74
- // TODO: test baseline stuff more?
75
- expect(true, "No layers to verify").toBe(true);
76
- }
77
-
78
- for (let layer of startingLayers) {
79
- expect(layer.isSetup, `has isSetup for ${layer.name}`).toBeInstanceOf(Function);
80
-
81
- let result = await layer.isSetup(project);
82
-
83
- expect(result, `${layer.name} is setup`).toBe(true);
84
- }
85
- });
86
-
87
- /**
88
- * Are these valuable? no one would invoke the layers like this
89
- */
90
- // describe.skip("(re)applying", () => {
91
- // for (let layer of layers) {
92
- // if (RE_APPLY_ONLY.size > 0 && !RE_APPLY_ONLY.has(layer.name)) {
93
- // continue;
94
- // }
95
-
96
- // if (TODO.has(layer.name)) {
97
- // continue;
98
- // }
99
-
100
- // describe(layer.name, () => {
101
- // let expected = startingLayers.find((l) => l.name === layer.name);
102
-
103
- // beforeAll(async () => {
104
- // await layer.run(project);
105
- // });
106
-
107
- // if (expected) {
108
- // it("is applied", async () => {
109
- // expect(layer.isSetup, `has isSetup for ${layer.name}`).toBeInstanceOf(Function);
110
-
111
- // let result = await layer.isSetup(project, true);
112
-
113
- // if (typeof result === "object") {
114
- // expect(result.reasons, `${layer.name} is setup`).deep.equal([]);
115
- // expect(result.isSetup, `${layer.name} is setup`).toBe(true);
116
- // return;
117
- // }
118
-
119
- // expect(result, `${layer.name} is setup`).toBe(true);
120
-
121
- // return;
122
- // });
123
- // } else {
124
- // it("is not applied", async () => {
125
- // expect(layer.isSetup, `has isSetup for ${layer.name}`).toBeInstanceOf(Function);
126
-
127
- // let result = await layer.isSetup(project, true);
128
-
129
- // if (typeof result === "object") {
130
- // expect(result.isSetup, `${layer.name} is not setup`).toBe(false);
131
- // hardExpect(result.reasons.length, `${layer.name} is not setup`).toBeGreaterThan(0);
132
- // return;
133
- // }
134
-
135
- // expect(result, `${layer.name} is not setup`).toBe(false);
136
- // });
137
- // }
138
- // });
139
- // }
140
- // });
141
-
142
- /**
143
- * Simulates running the CLI again with different options selected
144
- * on the same project
145
- */
146
- describe("apply anew", () => {
147
- let newLayers = layers
148
- .filter((layer) => {
149
- if (RE_APPLY_ONLY.size > 0 && !RE_APPLY_ONLY.has(layer.name)) {
150
- return false;
151
- }
152
-
153
- if (TODO.has(layer.name)) {
154
- return false;
155
- }
156
-
157
- return true;
158
- })
159
- .map((layer) => ({ name: layer.name, layer }));
160
-
161
- describe.each(newLayers)("$name", ({ layer }) => {
162
- beforeAll(async () => {
163
- // Simulate running the CLI again, adding one more option while
164
- // keeping the previously-selected layers.
165
- await reapply(project, [...new Set([...layerNames, layer.name])]);
166
- });
167
-
168
- it.for(startingLayers)("starting layers still present: $name", async (layer) => {
169
- expect(layer.isSetup, `has isSetup for ${layer.name}`).toBeInstanceOf(Function);
170
-
171
- let result = await layer.isSetup(project, true);
172
-
173
- if (typeof result === "object") {
174
- expect(result.reasons, `${layer.name} is setup`).deep.equal([]);
175
- expect(result.isSetup, `${layer.name} is setup`).toBe(true);
176
- return;
177
- }
178
-
179
- expect(result, `${layer.name} is setup`).toBe(true);
180
- });
181
-
182
- it("is applied", async () => {
183
- expect(layer.isSetup, `has isSetup for ${layer.name}`).toBeInstanceOf(Function);
184
-
185
- let result = await layer.isSetup(project, true);
186
-
187
- if (typeof result === "object") {
188
- expect(result.reasons, `${layer.name} is setup`).deep.equal([]);
189
- expect(result.isSetup, `${layer.name} is setup`).toBe(true);
190
- return;
191
- }
192
-
193
- expect(result, `${layer.name} is setup`).toBe(true);
194
-
195
- return;
196
- });
197
- });
198
- });
199
- });
200
- });