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.
- package/.github/workflows/ci.yml +17 -2
- package/.release-plan.json +88 -4
- package/CHANGELOG.md +57 -0
- package/package.json +3 -2
- package/packages/build-tooling-utils/README.md +37 -0
- package/packages/build-tooling-utils/index.ts +2 -0
- package/packages/build-tooling-utils/package.json +42 -0
- package/packages/build-tooling-utils/rolldown.config.js +18 -0
- package/packages/build-tooling-utils/src/extensions.ts +18 -0
- package/packages/build-tooling-utils/src/maybe-babel.ts +146 -0
- package/packages/rolldown/README.md +115 -0
- package/packages/rolldown/index.ts +56 -0
- package/packages/rolldown/package.json +59 -0
- package/packages/rolldown/rolldown.config.js +21 -0
- package/packages/rolldown/src/babel.ts +136 -0
- package/packages/rolldown/src/define-config.ts +32 -0
- package/packages/rolldown/src/externals.ts +83 -0
- package/packages/rolldown/src/isolated-declarations.ts +65 -0
- package/packages/rolldown/src/transform.ts +162 -0
- package/packages/vite/README.md +7 -21
- package/packages/vite/index.ts +1 -1
- package/packages/vite/package.json +4 -6
- package/packages/vite/src/ember.ts +129 -15
- package/packages/vite/src/test-html.ts +86 -0
- package/src/bases/minimal-app/files/app/router.ts +1 -0
- package/src/bases/minimal-app/files/tsconfig.json +1 -0
- package/src/bases/minimal-app/index.js +2 -2
- package/src/bases/minimal-library/files/README.md +41 -0
- package/src/bases/minimal-library/files/package.json +49 -0
- package/src/bases/minimal-library/files/tsconfig.json +10 -0
- package/src/bases/minimal-library/files/tsdown.config.js +6 -0
- package/src/bases/minimal-library/index.js +158 -2
- package/src/cli/index.js +21 -2
- package/src/cli/questions/layers.js +5 -2
- package/src/cli/questions/project-type.js +0 -5
- package/src/layers/are-the-types-wrong/index.js +74 -0
- package/src/layers/git/files/gitignore +14 -1
- package/src/layers/git/index.js +6 -5
- package/src/layers/github-actions/index.js +12 -8
- package/src/layers/index.js +1 -1
- package/src/layers/inspector-support/index.js +101 -0
- package/src/layers/prettier/files/.prettierignore +4 -0
- package/src/layers/publint/index.js +68 -0
- package/src/layers/qunit/files/tests/unit/macros-test.ts +2 -2
- package/src/layers/qunit/index.js +107 -7
- package/src/layers/qunit/library-files/config/test/babel.config.js +41 -0
- package/src/layers/qunit/library-files/config/test/testem.cjs +26 -0
- package/src/layers/qunit/library-files/tests/test-helper.ts +36 -0
- package/src/layers/qunit/library-files/tests/unit/.gitkeep +0 -0
- package/src/layers/qunit/library-files/vite.config.mjs +6 -0
- package/src/layers/typescript/index.js +43 -7
- package/src/layers/vitest/files/vitest.config.mjs +11 -11
- package/src/layers/vitest/index.js +70 -32
- package/src/utils/babel.js +9 -6
- package/src/utils/fs.js +44 -3
- package/src/utils/inspector-support.js +196 -0
- package/src/utils/npm.js +21 -7
- package/src/utils/remove-types.js +5 -0
- package/src/utils/rewrite-imports.js +157 -0
- package/src/utils/tsdown-config.js +85 -0
- package/src/utils/types.ts +5 -1
- package/test/ember.nvp/base-library.test.ts +232 -0
- package/test/ember.nvp/generator-replace-or-update.test.ts +2 -3
- package/test/ember.nvp/inspector-support.test.ts +179 -0
- package/test/ember.nvp/layer-inspector-support.test.ts +69 -0
- package/test/ember.nvp/layer-publish-checks.test.ts +103 -0
- package/test/ember.nvp/layer-qunit.test.ts +376 -15
- package/test/ember.nvp/layer-vitest.test.ts +250 -0
- package/test/ember.nvp/layers.test.ts +16 -0
- package/test/ember.nvp/library-src-fixtures.ts +81 -0
- package/test/ember.nvp/permutations/app-1.test.ts +3 -0
- package/test/ember.nvp/permutations/app-2.test.ts +3 -0
- package/test/ember.nvp/permutations/library-1.test.ts +3 -0
- package/test/ember.nvp/permutations/library-2.test.ts +3 -0
- package/test/ember.nvp/permutations/shared.ts +239 -0
- package/test/ember.nvp/rewrite-imports.test.ts +235 -0
- package/test/test-helpers/permutate.test.ts +17 -0
- package/test/test-helpers.ts +20 -7
- package/tsconfig.json +1 -0
- package/packages/vite/src/maybe-babel.ts +0 -219
- package/src/layers/qunit/files/run-tests.mjs +0 -30
- package/src/layers/vitest/files/tests/test-helper.ts +0 -5
- package/test/ember.nvp/permutations.test.ts +0 -200
- /package/src/{layers/vitest/files/tests/integration/.gitkeep → bases/minimal-library/files/src/index.ts} +0 -0
- /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
|
-
});
|
|
File without changes
|
/package/src/layers/{vitest/files/tests/unit → qunit/library-files/tests/rendering}/.gitkeep
RENAMED
|
File without changes
|