@jskit-ai/create-app 0.1.55 → 0.1.57
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/package.json
CHANGED
|
@@ -8,27 +8,16 @@ const __filename = fileURLToPath(import.meta.url);
|
|
|
8
8
|
const __dirname = path.dirname(__filename);
|
|
9
9
|
const APP_ROOT = path.resolve(__dirname, "../..");
|
|
10
10
|
|
|
11
|
-
const
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
"vue",
|
|
18
|
-
"vue-router",
|
|
19
|
-
"vuetify"
|
|
20
|
-
]);
|
|
21
|
-
|
|
22
|
-
const EXPECTED_DEV_DEPENDENCIES = Object.freeze([
|
|
23
|
-
"@jskit-ai/config-eslint",
|
|
24
|
-
"@jskit-ai/jskit-cli",
|
|
25
|
-
"@vitejs/plugin-vue",
|
|
26
|
-
"eslint",
|
|
27
|
-
"vite",
|
|
28
|
-
"vitest"
|
|
29
|
-
]);
|
|
11
|
+
const EXPECTED_MANAGED_SCRIPTS = Object.freeze({
|
|
12
|
+
devlinks: "jskit app link-local-packages",
|
|
13
|
+
verify: "jskit app verify && npm run --if-present verify:app",
|
|
14
|
+
release: "jskit app release",
|
|
15
|
+
"jskit:update": "jskit app update-packages"
|
|
16
|
+
});
|
|
30
17
|
|
|
31
|
-
const
|
|
18
|
+
const REQUIRED_TOP_LEVEL_ENTRIES = Object.freeze([
|
|
19
|
+
"AGENTS.md",
|
|
20
|
+
"app.json",
|
|
32
21
|
"Procfile",
|
|
33
22
|
"bin",
|
|
34
23
|
"config",
|
|
@@ -38,9 +27,9 @@ const EXPECTED_TOP_LEVEL_ENTRIES = Object.freeze([
|
|
|
38
27
|
"jsconfig.json",
|
|
39
28
|
"package.json",
|
|
40
29
|
"packages",
|
|
41
|
-
"server.js",
|
|
42
30
|
"scripts",
|
|
43
31
|
"server",
|
|
32
|
+
"server.js",
|
|
44
33
|
"src",
|
|
45
34
|
"tests",
|
|
46
35
|
"vite.config.mjs",
|
|
@@ -53,14 +42,6 @@ async function readPackageJson() {
|
|
|
53
42
|
return JSON.parse(raw);
|
|
54
43
|
}
|
|
55
44
|
|
|
56
|
-
function sortStrings(values) {
|
|
57
|
-
return [...values].sort((left, right) => left.localeCompare(right));
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function sortedKeys(record) {
|
|
61
|
-
return sortStrings(Object.keys(record || {}));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
45
|
async function readTopLevelEntries() {
|
|
65
46
|
const entries = await readdir(APP_ROOT, { withFileTypes: true });
|
|
66
47
|
const ignored = new Set([
|
|
@@ -92,21 +73,32 @@ async function listFilesRecursive(directory) {
|
|
|
92
73
|
return files;
|
|
93
74
|
}
|
|
94
75
|
|
|
95
|
-
test("
|
|
76
|
+
test("latest JSKIT app keeps managed wrapper scripts and JSKIT dependency specifiers", async () => {
|
|
96
77
|
const packageJson = await readPackageJson();
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
[...EXPECTED_RUNTIME_DEPENDENCIES].sort((left, right) => left.localeCompare(right))
|
|
78
|
+
const runtimeDependencies = Object.entries(packageJson.dependencies || {}).filter(([name]) =>
|
|
79
|
+
name.startsWith("@jskit-ai/")
|
|
100
80
|
);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
[...EXPECTED_DEV_DEPENDENCIES].sort((left, right) => left.localeCompare(right))
|
|
81
|
+
const devDependencies = Object.entries(packageJson.devDependencies || {}).filter(([name]) =>
|
|
82
|
+
name.startsWith("@jskit-ai/")
|
|
104
83
|
);
|
|
84
|
+
|
|
85
|
+
assert.ok(runtimeDependencies.length > 0, "Expected JSKIT runtime dependencies to be present.");
|
|
86
|
+
assert.ok(devDependencies.length > 0, "Expected JSKIT dev dependencies to be present.");
|
|
87
|
+
|
|
88
|
+
for (const [name, value] of [...runtimeDependencies, ...devDependencies]) {
|
|
89
|
+
assert.match(value, /^(0\.x|\d+\.\d+\.\d+)$/, `Expected ${name} to use a managed JSKIT version specifier.`);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
for (const [scriptName, expectedValue] of Object.entries(EXPECTED_MANAGED_SCRIPTS)) {
|
|
93
|
+
assert.equal(packageJson.scripts?.[scriptName], expectedValue, `Unexpected ${scriptName} script.`);
|
|
94
|
+
}
|
|
105
95
|
});
|
|
106
96
|
|
|
107
|
-
test("
|
|
97
|
+
test("latest JSKIT scaffold files are present at the app root", async () => {
|
|
108
98
|
const entries = await readTopLevelEntries();
|
|
109
|
-
|
|
99
|
+
for (const requiredEntry of REQUIRED_TOP_LEVEL_ENTRIES) {
|
|
100
|
+
assert.equal(entries.includes(requiredEntry), true, `Missing top-level scaffold entry: ${requiredEntry}`);
|
|
101
|
+
}
|
|
110
102
|
});
|
|
111
103
|
|
|
112
104
|
test("legacy app.manifest scaffold is removed from starter shell", async () => {
|