@synopackageland/templates 0.40.4 → 0.41.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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.41.0
4
+
5
+ - Require CLI `~0.49.0` in every generated project through the shared test scaffold
6
+ - Pin SDK/App 0.51.0 across Go, Python, Node.js, Rust and Compose templates, with the frontend SDK on `~0.51.0` and regenerated dependency locks
7
+ - Pin UI 0.20.5 to satisfy the frontend SDK peer dependency and retain reproducible Vue builds
8
+
3
9
  ## 0.40.4
4
10
 
5
11
  - Ignore private environment variants, key and certificate files, and npm credentials in every scaffold while keeping `.env.example` trackable
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synopackageland/templates",
3
- "version": "0.40.4",
3
+ "version": "0.41.0",
4
4
  "description": "Project templates for synopkgland init: native-go, native-python, native-node and native-rust (plain or Vue, with jobs, delegate and root-ops overlays), binary and compose.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -11,7 +11,7 @@
11
11
  "e2e:ai": "node --env-file-if-exists=.env node_modules/@synopackageland/cli/dist/e2e/dsm.js tunnel -- e2e run --config e2e.ai.config.ts tests/e2e/action.ai.e2e.ts"
12
12
  },
13
13
  "devDependencies": {
14
- "@synopackageland/cli": "~0.48.20",
14
+ "@synopackageland/cli": "~0.49.0",
15
15
  "@e2e-dev/web": "^0.14.0",
16
16
  "e2e": "^0.19.0"
17
17
  }
@@ -23,7 +23,7 @@ compose:
23
23
  web: {service: web, port: 8080, health: {path: /, status: 200}}
24
24
  network: {egress: isolated}
25
25
  identity_gateway:
26
- sdk: 0.50.0
26
+ sdk: 0.51.0
27
27
  mode: none
28
28
  listen: {http: 28000}
29
29
  # Web Apps default to new-page through the shared app-launch resolver.
@@ -1,6 +1,6 @@
1
1
  Native Go package build dependencies
2
2
 
3
- github.com/synopackageland/syno-pkg-land-sdk v0.50.0 (MIT)
3
+ github.com/synopackageland/syno-pkg-land-sdk v0.51.0 (MIT)
4
4
 
5
5
  Copyright (c) 2026 synopkgland
6
6
 
@@ -2,6 +2,6 @@ module __PACKAGE__
2
2
 
3
3
  go 1.26.10
4
4
 
5
- require github.com/synopackageland/syno-pkg-land-sdk v0.50.0
5
+ require github.com/synopackageland/syno-pkg-land-sdk v0.51.0
6
6
 
7
7
  require golang.org/x/sys v0.44.0 // indirect
@@ -1,4 +1,4 @@
1
- github.com/synopackageland/syno-pkg-land-sdk v0.50.0 h1:eaehFfsLqa18qFe0S3xjF/eaS3qg5ZSCycZdnGAvt7c=
2
- github.com/synopackageland/syno-pkg-land-sdk v0.50.0/go.mod h1:A4ZvKEQnCMk5offv/57Zsf1Z/pV1RmylS9cMfDqdBMQ=
1
+ github.com/synopackageland/syno-pkg-land-sdk v0.51.0 h1:DkFlrW3gsvUze8oqHtDJ+I4yrIdbFUyImqCcF4zWT0I=
2
+ github.com/synopackageland/syno-pkg-land-sdk v0.51.0/go.mod h1:A4ZvKEQnCMk5offv/57Zsf1Z/pV1RmylS9cMfDqdBMQ=
3
3
  golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
4
4
  golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
@@ -42,10 +42,13 @@ test('the default surface binds the real routes and the session-only picker',asy
42
42
  expect(url).toBe('/webapi/entry.cgi')
43
43
  const body=init?.body as URLSearchParams
44
44
  expect(body.get('api')).toBe('SYNO.FileStation.List')
45
- expect(body.get('method')).toBe('list_share')
46
- expect(body.get('SynoToken')).toBe('fixture-token')
45
+ expect(['list_share','list']).toContain(body.get('method'))
46
+ expect(body.has('SynoToken')).toBe(false)
47
+ expect(new Headers(init?.headers).get('X-SYNO-TOKEN')).toBe('fixture-token')
47
48
  expect(init?.credentials).toBe('same-origin')
48
- return new Response(JSON.stringify({success:true,data:{shares:[{name:'home',path:'/home',isdir:true}],offset:0,total:1}}))
49
+ if(body.get('method')==='list_share')return new Response(JSON.stringify({success:true,data:{shares:[{name:'home',path:'/home',isdir:true}],offset:0,total:1}}))
50
+ expect(body.get('folder_path')).toBe('/home')
51
+ return new Response(JSON.stringify({success:true,data:{files:[],offset:0,total:0}}))
49
52
  })
50
53
  vi.stubGlobal('fetch',fetch);cleanup.push(()=>vi.unstubAllGlobals())
51
54
  const call=vi.fn(async(method:string,params?:unknown)=>{
@@ -61,10 +64,12 @@ test('the default surface binds the real routes and the session-only picker',asy
61
64
  const root=render({call,locale:'en',files:{token:()=> 'fixture-token'}});await settle()
62
65
  button(root,'Choose folder').click();await settle()
63
66
  // The SDK picker selects a folder with a row click.
64
- const row=root.querySelector<HTMLElement>('tr[data-row-key="/home"]')!;expect(row).toBeTruthy();row.dispatchEvent(new MouseEvent('click',{bubbles:true}));await settle()
67
+ await vi.waitFor(()=>expect(root.querySelector('[data-row-key="/home"]')).toBeTruthy())
68
+ const row=root.querySelector<HTMLElement>('[data-row-key="/home"]')!;row.dispatchEvent(new MouseEvent('click',{bubbles:true}));await settle()
65
69
  button(root,'Confirm selection').click();await settle()
66
70
  expect(call).toHaveBeenCalledWith('delegate.select_destination',{key:'save',path:'/home'})
67
- expect(fetch).toHaveBeenCalledTimes(1)
71
+ // Selecting a folder prefetches its children through the same session-only provider.
72
+ await vi.waitFor(()=>expect(fetch).toHaveBeenCalledTimes(2))
68
73
  expect(call).not.toHaveBeenCalledWith('bg.browse',expect.anything())
69
74
  // The SDK hides the sample save unless an App opts in; the template opts in with sample-save.
70
75
  button(root,'Save example file').click();await settle()
@@ -7,8 +7,8 @@
7
7
  "name": "native-dsm-vue-app",
8
8
  "dependencies": {
9
9
  "@lucide/vue": "1.48.0",
10
- "@synopackageland/sdk": "0.50.0",
11
- "@synopackageland/ui": "0.20.0",
10
+ "@synopackageland/sdk": "~0.51.0",
11
+ "@synopackageland/ui": "0.20.5",
12
12
  "vue": "3.5.43"
13
13
  },
14
14
  "devDependencies": {
@@ -1168,22 +1168,19 @@
1168
1168
  "license": "MIT"
1169
1169
  },
1170
1170
  "node_modules/@swc/helpers": {
1171
- "version": "0.5.23",
1172
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz",
1173
- "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==",
1174
- "license": "Apache-2.0",
1175
- "dependencies": {
1176
- "tslib": "^2.8.0"
1177
- }
1171
+ "version": "0.5.24",
1172
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.24.tgz",
1173
+ "integrity": "sha512-6tcXo4kA8HgGO7AVmawB57RYi/piBPYVHVcO6dXjX+SZw8GoHmi262sp4v2Ha2kNP9Cx84qei27yT+fjS1lxgg==",
1174
+ "license": "Apache-2.0"
1178
1175
  },
1179
1176
  "node_modules/@synopackageland/sdk": {
1180
- "version": "0.50.0",
1181
- "resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.50.0.tgz",
1182
- "integrity": "sha512-9cc/aBNicwE/2Ospx1a/akBGU2B8B2cQg6i06LbpZe8rdDBuPdLmAZh5WIlREsUruetq0mfmlVoeQ8l/lrdZ3g==",
1177
+ "version": "0.51.0",
1178
+ "resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.51.0.tgz",
1179
+ "integrity": "sha512-Ijv4n5B2YlDde4P2c3AZj0YPiO08ft+kUiNYIGfQiv3nbyniljX0k6nllG7oi85jD2gPrWQM+HIw7BVpU70WWg==",
1183
1180
  "license": "MIT",
1184
1181
  "peerDependencies": {
1185
1182
  "@lucide/vue": "^1.48.0",
1186
- "@synopackageland/ui": ">=0.10.1 <0.21.0",
1183
+ "@synopackageland/ui": ">=0.20.5 <0.21.0",
1187
1184
  "vue": "^3.5.0"
1188
1185
  },
1189
1186
  "peerDependenciesMeta": {
@@ -1196,9 +1193,9 @@
1196
1193
  }
1197
1194
  },
1198
1195
  "node_modules/@synopackageland/ui": {
1199
- "version": "0.20.0",
1200
- "resolved": "https://registry.npmjs.org/@synopackageland/ui/-/ui-0.20.0.tgz",
1201
- "integrity": "sha512-YoeMoI2s1jw+1fdyVjc2L9GzwaDCiCrj+zMQDOBiCCjPdPiOElENAbBm1vo/XKViVNhPoH4p3gXQEQxf4RRUXA==",
1196
+ "version": "0.20.5",
1197
+ "resolved": "https://registry.npmjs.org/@synopackageland/ui/-/ui-0.20.5.tgz",
1198
+ "integrity": "sha512-lyn3W+VvPu5BuZN1CMPZP3R7B1phUcqRzhmSmSJ8rubptPk1/wbfa91cLdYtRC9qKBBSnXlf6c9ibjkskf5qLQ==",
1202
1199
  "license": "MIT",
1203
1200
  "dependencies": {
1204
1201
  "@floating-ui/dom": "1.8.0",
@@ -2440,9 +2437,9 @@
2440
2437
  }
2441
2438
  },
2442
2439
  "node_modules/prosemirror-changeset": {
2443
- "version": "2.4.5",
2444
- "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.5.tgz",
2445
- "integrity": "sha512-hv3Qhsn5GyoferiBqL8euGvj3Y8Z+2Ef75NnPLChr5DTWArpPAjK6F96Yc0iM7SBYNDPQbQaA+xEtAR8NuWo9A==",
2440
+ "version": "2.4.6",
2441
+ "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.6.tgz",
2442
+ "integrity": "sha512-P0cY3DSLm4M2boUOCmHDyaID5o6HgWmb21Bvs9p8lLqfJjKBBEHG5Ma5qW5SCmwOYamtWOLf2k+yvt6077zlTg==",
2446
2443
  "license": "MIT",
2447
2444
  "dependencies": {
2448
2445
  "prosemirror-transform": "^1.0.0"
@@ -2559,9 +2556,9 @@
2559
2556
  }
2560
2557
  },
2561
2558
  "node_modules/prosemirror-transform": {
2562
- "version": "1.12.4",
2563
- "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.12.4.tgz",
2564
- "integrity": "sha512-2/WuPum3pn+O/Vi2vzpi8210ICUe2kIPXdLYjQ09Pv5DtT5bcKWMJhAKPBwvpPjpp5iOYUVwVEr0gOM1BY1Mgw==",
2559
+ "version": "1.12.5",
2560
+ "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.12.5.tgz",
2561
+ "integrity": "sha512-3EBXZBM4h3MKuWvs9sQ7IA0/v6jCqCZ4wC08PIvzY1VSQWDL90KEyfg5C0Ex52UJesf/QVogxvuBsZdKmLc3NQ==",
2565
2562
  "license": "MIT",
2566
2563
  "dependencies": {
2567
2564
  "prosemirror-model": "^1.21.0"
@@ -2783,12 +2780,6 @@
2783
2780
  "node": "^22.14.0 || >=24.0.0"
2784
2781
  }
2785
2782
  },
2786
- "node_modules/tslib": {
2787
- "version": "2.8.1",
2788
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
2789
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
2790
- "license": "0BSD"
2791
- },
2792
2783
  "node_modules/typescript": {
2793
2784
  "version": "5.9.3",
2794
2785
  "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
@@ -8,8 +8,8 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@lucide/vue": "1.48.0",
11
- "@synopackageland/sdk": "0.50.0",
12
- "@synopackageland/ui": "0.20.0",
11
+ "@synopackageland/sdk": "~0.51.0",
12
+ "@synopackageland/ui": "0.20.5",
13
13
  "vue": "3.5.43"
14
14
  },
15
15
  "devDependencies": {
@@ -49,7 +49,7 @@
49
49
  "license": "MIT"
50
50
  },
51
51
  "vendor/@synopackageland/app": {
52
- "version": "0.50.0",
52
+ "version": "0.51.0",
53
53
  "license": "MIT",
54
54
  "engines": {
55
55
  "node": ">=22"
@@ -49,7 +49,7 @@ backend:
49
49
  runtime: node
50
50
  dir: backend/app
51
51
  entry: main.js
52
- sdk: 0.50.0
52
+ sdk: 0.51.0
53
53
  node: { package: Node.js_v22 }
54
54
 
55
55
  ui:
@@ -47,7 +47,7 @@ backend:
47
47
  runtime: python
48
48
  dir: backend/app
49
49
  entry: main.py
50
- sdk: 0.50.0
50
+ sdk: 0.51.0
51
51
 
52
52
  ui:
53
53
  # Non-UI-SDK frontends open a full page; Portal is a separate opt-in.
@@ -104,8 +104,8 @@ dependencies = [
104
104
 
105
105
  [[package]]
106
106
  name = "syno-pkg-land-app"
107
- version = "0.50.0"
108
- source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.50.0#b1adac9407cf1338fa79741ebfcbdaa5c1698b6f"
107
+ version = "0.51.0"
108
+ source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.51.0#fffdbb3781fe7f8c57294cdf082b1bf347c0957d"
109
109
  dependencies = [
110
110
  "libc",
111
111
  "serde",
@@ -9,7 +9,7 @@ libc = "0.2"
9
9
  serde = { version = "1", features = ["derive"] }
10
10
  serde_json = "1"
11
11
  # The SDK version is the tag; `synopkgland check` reads it from Cargo.lock.
12
- syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.50.0" }
12
+ syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.51.0" }
13
13
 
14
14
  [profile.release]
15
15
  # A handler panic becomes an "internal" reply; abort would end the App without one.
@@ -170,8 +170,8 @@ dependencies = [
170
170
 
171
171
  [[package]]
172
172
  name = "syno-pkg-land-app"
173
- version = "0.50.0"
174
- source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.50.0#b1adac9407cf1338fa79741ebfcbdaa5c1698b6f"
173
+ version = "0.51.0"
174
+ source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.51.0#fffdbb3781fe7f8c57294cdf082b1bf347c0957d"
175
175
  dependencies = [
176
176
  "libc",
177
177
  "serde",
@@ -10,7 +10,7 @@ libc = "0.2"
10
10
  serde = { version = "1", features = ["derive"] }
11
11
  serde_json = "1"
12
12
  # The SDK version is the tag; `synopkgland check` reads it from Cargo.lock.
13
- syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.50.0" }
13
+ syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.51.0" }
14
14
 
15
15
  [profile.release]
16
16
  # A handler panic becomes an "internal" reply; abort would end the App without one.