@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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/create-app",
3
- "version": "0.1.55",
3
+ "version": "0.1.57",
4
4
  "description": "Scaffold minimal JSKIT app shells.",
5
5
  "type": "module",
6
6
  "files": [
@@ -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 EXPECTED_RUNTIME_DEPENDENCIES = Object.freeze([
12
- "@fastify/type-provider-typebox",
13
- "@jskit-ai/http-runtime",
14
- "@jskit-ai/kernel",
15
- "@local/main",
16
- "fastify",
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 EXPECTED_TOP_LEVEL_ENTRIES = Object.freeze([
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("minimal shell keeps strict dependency allowlist", async () => {
76
+ test("latest JSKIT app keeps managed wrapper scripts and JSKIT dependency specifiers", async () => {
96
77
  const packageJson = await readPackageJson();
97
- assert.deepEqual(
98
- sortedKeys(packageJson.dependencies),
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
- assert.deepEqual(
102
- sortedKeys(packageJson.devDependencies),
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("starter shell keeps a strict top-level footprint", async () => {
97
+ test("latest JSKIT scaffold files are present at the app root", async () => {
108
98
  const entries = await readTopLevelEntries();
109
- assert.deepEqual(sortStrings(entries), sortStrings(EXPECTED_TOP_LEVEL_ENTRIES));
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 () => {