@nocobase/plugin-multi-portal 2.2.0-alpha.12 → 3.0.0-alpha.2

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.
@@ -8,19 +8,19 @@
8
8
  */
9
9
 
10
10
  module.exports = {
11
- "@nocobase/flow-engine": "2.2.0-alpha.12",
12
- "@nocobase/client": "2.2.0-alpha.12",
13
- "@nocobase/client-v2": "2.2.0-alpha.12",
11
+ "@nocobase/flow-engine": "3.0.0-alpha.2",
12
+ "@nocobase/client": "3.0.0-alpha.2",
13
+ "@nocobase/client-v2": "3.0.0-alpha.2",
14
14
  "antd": "5.24.2",
15
15
  "react": "18.2.0",
16
16
  "react-router-dom": "6.30.1",
17
- "@nocobase/database": "2.2.0-alpha.12",
18
- "@nocobase/server": "2.2.0-alpha.12",
19
- "@nocobase/resourcer": "2.2.0-alpha.12",
20
- "@nocobase/utils": "2.2.0-alpha.12",
17
+ "@nocobase/database": "3.0.0-alpha.2",
18
+ "@nocobase/server": "3.0.0-alpha.2",
19
+ "@nocobase/resourcer": "3.0.0-alpha.2",
20
+ "@nocobase/utils": "3.0.0-alpha.2",
21
21
  "ahooks": "3.7.8",
22
22
  "antd-style": "3.7.1",
23
- "@nocobase/plugin-ui-layout": "2.2.0-alpha.12",
23
+ "@nocobase/plugin-ui-layout": "3.0.0-alpha.2",
24
24
  "@ant-design/icons": "5.6.1",
25
25
  "sequelize": "6.35.2"
26
26
  };
@@ -1 +1 @@
1
- {"author":"Isaac Z. Schlueter","name":"tar","description":"tar for node","version":"7.5.15","repository":{"type":"git","url":"https://github.com/isaacs/node-tar.git"},"scripts":{"genparse":"node scripts/generate-parse-fixtures.js","snap":"tap","test":"tap","pretest":"npm run prepare","presnap":"npm run prepare","prepare":"tshy && bash scripts/build.sh","preversion":"npm test","postversion":"npm publish","prepublishOnly":"git push origin --follow-tags","format":"prettier --write . --log-level warn","typedoc":"typedoc --tsconfig .tshy/esm.json ./src/*.ts","lint":"oxlint --fix src test","postsnap":"npm run lint","postlint":"npm run format"},"dependencies":{"@isaacs/fs-minipass":"^4.0.0","chownr":"^3.0.0","minipass":"^7.1.2","minizlib":"^3.1.0","yallist":"^5.0.0"},"devDependencies":{"@types/node":"^25.5.0","chmodr":"^2.0.2","end-of-stream":"^1.4.3","esbuild":"^0.27.4","events-to-array":"^2.0.3","mutate-fs":"^2.1.1","nock":"^13.5.4","oxlint":"^1.57.0","oxlint-tsgolint":"^0.17.3","prettier":"^3.8.1","rimraf":"^6.1.2","tap":"^21.6.2","tshy":"^3.3.2","typedoc":"^0.28.18"},"license":"BlueOak-1.0.0","engines":{"node":">=18"},"files":["dist"],"tshy":{"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}},"./raw":"./src/index.ts","./c":"./src/create.ts","./create":"./src/create.ts","./replace":"./src/create.ts","./r":"./src/create.ts","./list":"./src/list.ts","./t":"./src/list.ts","./update":"./src/update.ts","./u":"./src/update.ts","./extract":"./src/extract.ts","./x":"./src/extract.ts","./pack":"./src/pack.ts","./unpack":"./src/unpack.ts","./parse":"./src/parse.ts","./read-entry":"./src/read-entry.ts","./write-entry":"./src/write-entry.ts","./header":"./src/header.ts","./pax":"./src/pax.ts","./types":"./src/types.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}},"./raw":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./c":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./create":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./replace":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./r":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./list":{"import":{"types":"./dist/esm/list.d.ts","default":"./dist/esm/list.js"},"require":{"types":"./dist/commonjs/list.d.ts","default":"./dist/commonjs/list.js"}},"./t":{"import":{"types":"./dist/esm/list.d.ts","default":"./dist/esm/list.js"},"require":{"types":"./dist/commonjs/list.d.ts","default":"./dist/commonjs/list.js"}},"./update":{"import":{"types":"./dist/esm/update.d.ts","default":"./dist/esm/update.js"},"require":{"types":"./dist/commonjs/update.d.ts","default":"./dist/commonjs/update.js"}},"./u":{"import":{"types":"./dist/esm/update.d.ts","default":"./dist/esm/update.js"},"require":{"types":"./dist/commonjs/update.d.ts","default":"./dist/commonjs/update.js"}},"./extract":{"import":{"types":"./dist/esm/extract.d.ts","default":"./dist/esm/extract.js"},"require":{"types":"./dist/commonjs/extract.d.ts","default":"./dist/commonjs/extract.js"}},"./x":{"import":{"types":"./dist/esm/extract.d.ts","default":"./dist/esm/extract.js"},"require":{"types":"./dist/commonjs/extract.d.ts","default":"./dist/commonjs/extract.js"}},"./pack":{"import":{"types":"./dist/esm/pack.d.ts","default":"./dist/esm/pack.js"},"require":{"types":"./dist/commonjs/pack.d.ts","default":"./dist/commonjs/pack.js"}},"./unpack":{"import":{"types":"./dist/esm/unpack.d.ts","default":"./dist/esm/unpack.js"},"require":{"types":"./dist/commonjs/unpack.d.ts","default":"./dist/commonjs/unpack.js"}},"./parse":{"import":{"types":"./dist/esm/parse.d.ts","default":"./dist/esm/parse.js"},"require":{"types":"./dist/commonjs/parse.d.ts","default":"./dist/commonjs/parse.js"}},"./read-entry":{"import":{"types":"./dist/esm/read-entry.d.ts","default":"./dist/esm/read-entry.js"},"require":{"types":"./dist/commonjs/read-entry.d.ts","default":"./dist/commonjs/read-entry.js"}},"./write-entry":{"import":{"types":"./dist/esm/write-entry.d.ts","default":"./dist/esm/write-entry.js"},"require":{"types":"./dist/commonjs/write-entry.d.ts","default":"./dist/commonjs/write-entry.js"}},"./header":{"import":{"types":"./dist/esm/header.d.ts","default":"./dist/esm/header.js"},"require":{"types":"./dist/commonjs/header.d.ts","default":"./dist/commonjs/header.js"}},"./pax":{"import":{"types":"./dist/esm/pax.d.ts","default":"./dist/esm/pax.js"},"require":{"types":"./dist/commonjs/pax.d.ts","default":"./dist/commonjs/pax.js"}},"./types":{"import":{"types":"./dist/esm/types.d.ts","default":"./dist/esm/types.js"},"require":{"types":"./dist/commonjs/types.d.ts","default":"./dist/commonjs/types.js"}}},"type":"module","main":"./dist/commonjs/index.min.js","types":"./dist/commonjs/index.d.ts","module":"./dist/esm/index.min.js","_lastModified":"2026-07-30T03:54:26.865Z"}
1
+ {"author":"Isaac Z. Schlueter","name":"tar","description":"tar for node","version":"7.5.15","repository":{"type":"git","url":"https://github.com/isaacs/node-tar.git"},"scripts":{"genparse":"node scripts/generate-parse-fixtures.js","snap":"tap","test":"tap","pretest":"npm run prepare","presnap":"npm run prepare","prepare":"tshy && bash scripts/build.sh","preversion":"npm test","postversion":"npm publish","prepublishOnly":"git push origin --follow-tags","format":"prettier --write . --log-level warn","typedoc":"typedoc --tsconfig .tshy/esm.json ./src/*.ts","lint":"oxlint --fix src test","postsnap":"npm run lint","postlint":"npm run format"},"dependencies":{"@isaacs/fs-minipass":"^4.0.0","chownr":"^3.0.0","minipass":"^7.1.2","minizlib":"^3.1.0","yallist":"^5.0.0"},"devDependencies":{"@types/node":"^25.5.0","chmodr":"^2.0.2","end-of-stream":"^1.4.3","esbuild":"^0.27.4","events-to-array":"^2.0.3","mutate-fs":"^2.1.1","nock":"^13.5.4","oxlint":"^1.57.0","oxlint-tsgolint":"^0.17.3","prettier":"^3.8.1","rimraf":"^6.1.2","tap":"^21.6.2","tshy":"^3.3.2","typedoc":"^0.28.18"},"license":"BlueOak-1.0.0","engines":{"node":">=18"},"files":["dist"],"tshy":{"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}},"./raw":"./src/index.ts","./c":"./src/create.ts","./create":"./src/create.ts","./replace":"./src/create.ts","./r":"./src/create.ts","./list":"./src/list.ts","./t":"./src/list.ts","./update":"./src/update.ts","./u":"./src/update.ts","./extract":"./src/extract.ts","./x":"./src/extract.ts","./pack":"./src/pack.ts","./unpack":"./src/unpack.ts","./parse":"./src/parse.ts","./read-entry":"./src/read-entry.ts","./write-entry":"./src/write-entry.ts","./header":"./src/header.ts","./pax":"./src/pax.ts","./types":"./src/types.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}},"./raw":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./c":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./create":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./replace":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./r":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./list":{"import":{"types":"./dist/esm/list.d.ts","default":"./dist/esm/list.js"},"require":{"types":"./dist/commonjs/list.d.ts","default":"./dist/commonjs/list.js"}},"./t":{"import":{"types":"./dist/esm/list.d.ts","default":"./dist/esm/list.js"},"require":{"types":"./dist/commonjs/list.d.ts","default":"./dist/commonjs/list.js"}},"./update":{"import":{"types":"./dist/esm/update.d.ts","default":"./dist/esm/update.js"},"require":{"types":"./dist/commonjs/update.d.ts","default":"./dist/commonjs/update.js"}},"./u":{"import":{"types":"./dist/esm/update.d.ts","default":"./dist/esm/update.js"},"require":{"types":"./dist/commonjs/update.d.ts","default":"./dist/commonjs/update.js"}},"./extract":{"import":{"types":"./dist/esm/extract.d.ts","default":"./dist/esm/extract.js"},"require":{"types":"./dist/commonjs/extract.d.ts","default":"./dist/commonjs/extract.js"}},"./x":{"import":{"types":"./dist/esm/extract.d.ts","default":"./dist/esm/extract.js"},"require":{"types":"./dist/commonjs/extract.d.ts","default":"./dist/commonjs/extract.js"}},"./pack":{"import":{"types":"./dist/esm/pack.d.ts","default":"./dist/esm/pack.js"},"require":{"types":"./dist/commonjs/pack.d.ts","default":"./dist/commonjs/pack.js"}},"./unpack":{"import":{"types":"./dist/esm/unpack.d.ts","default":"./dist/esm/unpack.js"},"require":{"types":"./dist/commonjs/unpack.d.ts","default":"./dist/commonjs/unpack.js"}},"./parse":{"import":{"types":"./dist/esm/parse.d.ts","default":"./dist/esm/parse.js"},"require":{"types":"./dist/commonjs/parse.d.ts","default":"./dist/commonjs/parse.js"}},"./read-entry":{"import":{"types":"./dist/esm/read-entry.d.ts","default":"./dist/esm/read-entry.js"},"require":{"types":"./dist/commonjs/read-entry.d.ts","default":"./dist/commonjs/read-entry.js"}},"./write-entry":{"import":{"types":"./dist/esm/write-entry.d.ts","default":"./dist/esm/write-entry.js"},"require":{"types":"./dist/commonjs/write-entry.d.ts","default":"./dist/commonjs/write-entry.js"}},"./header":{"import":{"types":"./dist/esm/header.d.ts","default":"./dist/esm/header.js"},"require":{"types":"./dist/commonjs/header.d.ts","default":"./dist/commonjs/header.js"}},"./pax":{"import":{"types":"./dist/esm/pax.d.ts","default":"./dist/esm/pax.js"},"require":{"types":"./dist/commonjs/pax.d.ts","default":"./dist/commonjs/pax.js"}},"./types":{"import":{"types":"./dist/esm/types.d.ts","default":"./dist/esm/types.js"},"require":{"types":"./dist/commonjs/types.d.ts","default":"./dist/commonjs/types.js"}}},"type":"module","main":"./dist/commonjs/index.min.js","types":"./dist/commonjs/index.d.ts","module":"./dist/esm/index.min.js","_lastModified":"2026-07-30T05:57:24.832Z"}
@@ -28,6 +28,7 @@ export declare class PluginMultiPortalServer extends Plugin {
28
28
  private getAppName;
29
29
  private getMultiPortalStorageItem;
30
30
  private warnPortalStorageSyncFailed;
31
+ private logPortalBuildHtml;
31
32
  private getPortalStorageTaskKey;
32
33
  private runPortalStorageTask;
33
34
  private removePortalStorageDist;
@@ -2373,6 +2373,14 @@ class PluginMultiPortalServer extends import_server.Plugin {
2373
2373
  error
2374
2374
  });
2375
2375
  }
2376
+ logPortalBuildHtml(item, status, reason) {
2377
+ var _a, _b;
2378
+ (_b = (_a = this.app.logger) == null ? void 0 : _a.info) == null ? void 0 : _b.call(_a, `Portal yarn build:html ${status} for ${item.appName}/${item.portalName}`, {
2379
+ appName: item.appName,
2380
+ portalName: item.portalName,
2381
+ reason
2382
+ });
2383
+ }
2376
2384
  getPortalStorageTaskKey(item) {
2377
2385
  return `${item.appName}/${item.portalName}`;
2378
2386
  }
@@ -2408,6 +2416,7 @@ class PluginMultiPortalServer extends import_server.Plugin {
2408
2416
  var _a;
2409
2417
  const taskKey = this.getPortalStorageTaskKey(item);
2410
2418
  if (this.portalStorageTaskKeys.has(taskKey)) {
2419
+ this.logPortalBuildHtml(item, "skipped", "a storage task is already running");
2411
2420
  await ((_a = template.cleanup) == null ? void 0 : _a.call(template));
2412
2421
  return;
2413
2422
  }
@@ -2431,9 +2440,12 @@ class PluginMultiPortalServer extends import_server.Plugin {
2431
2440
  await ensurePortalStorageConfigFiles(portalDir, item);
2432
2441
  await appendPortalStorageLog(logPath, `Portal configuration files updated in ${portalDir}.`);
2433
2442
  if (item.enabled) {
2443
+ this.logPortalBuildHtml(item, "requested", "storage directory was initialized");
2434
2444
  await buildPortalStorageItem(portalDir, item);
2445
+ this.logPortalBuildHtml(item, "completed", "yarn build:html finished successfully");
2435
2446
  return;
2436
2447
  }
2448
+ this.logPortalBuildHtml(item, "skipped", "the portal is disabled");
2437
2449
  await this.removePortalStorageDist(item);
2438
2450
  await appendPortalStorageLog(logPath, `Portal dist directory removed for ${item.appName}/${item.portalName}.`);
2439
2451
  } catch (error) {
@@ -2451,24 +2463,36 @@ class PluginMultiPortalServer extends import_server.Plugin {
2451
2463
  this.portalStorageTasks.set(taskKey, task);
2452
2464
  await task;
2453
2465
  }
2454
- async ensurePortalStorageItem(item) {
2466
+ async ensurePortalStorageItem(item, options = {}) {
2455
2467
  const portalDir = (0, import_utils.storagePathJoin)("portals", item.appName, item.portalName);
2456
2468
  const portalIndex = import_path.default.join(portalDir, "dist", "index.html");
2469
+ const logPath = getPortalStorageLogPath(item);
2457
2470
  if (!await pathExists(portalDir)) {
2458
- const template = await resolvePortalTemplate(getInitPortalTemplate(), getPortalStorageLogPath(item));
2471
+ const template = await resolvePortalTemplate(getInitPortalTemplate(), logPath);
2459
2472
  await this.schedulePortalTemplateCopyAndBuild(item, template, portalDir);
2460
2473
  return;
2461
2474
  }
2462
2475
  await ensurePortalStorageConfigFiles(portalDir, item);
2463
2476
  if (item.enabled) {
2464
- if (!await pathExists(portalIndex)) {
2477
+ const hasPortalIndex = await pathExists(portalIndex);
2478
+ if (options.forceBuild || !hasPortalIndex) {
2479
+ this.logPortalBuildHtml(
2480
+ item,
2481
+ "requested",
2482
+ options.forceBuild ? "forceBuild is enabled" : "dist/index.html does not exist"
2483
+ );
2465
2484
  await buildPortalStorageItem(portalDir, item);
2485
+ this.logPortalBuildHtml(item, "completed", "yarn build:html finished successfully");
2486
+ } else {
2487
+ this.logPortalBuildHtml(item, "skipped", "dist/index.html already exists");
2466
2488
  }
2467
2489
  return;
2468
2490
  }
2491
+ this.logPortalBuildHtml(item, "skipped", "the portal is disabled");
2469
2492
  await this.removePortalStorageDist(item);
2493
+ await appendPortalStorageLog(logPath, `Portal dist directory removed for ${item.appName}/${item.portalName}.`);
2470
2494
  }
2471
- async syncMultiPortalStorageItem(multiPortal, options, syncPrevious = false) {
2495
+ async syncMultiPortalStorageItem(multiPortal, options, syncPrevious = false, forceBuild = false) {
2472
2496
  const currentItem = this.getMultiPortalStorageItem(multiPortal);
2473
2497
  const previousItem = syncPrevious ? this.getMultiPortalStorageItem(multiPortal, true) : null;
2474
2498
  await this.runPortalStorageTask(async () => {
@@ -2476,7 +2500,7 @@ class PluginMultiPortalServer extends import_server.Plugin {
2476
2500
  await this.removePortalStorageDist(previousItem);
2477
2501
  }
2478
2502
  if (currentItem) {
2479
- await this.ensurePortalStorageItem(currentItem);
2503
+ await this.ensurePortalStorageItem(currentItem, { forceBuild });
2480
2504
  }
2481
2505
  }, options);
2482
2506
  }
@@ -2903,7 +2927,7 @@ class PluginMultiPortalServer extends import_server.Plugin {
2903
2927
  if (shouldSkipCreatePortalDirectory(options)) {
2904
2928
  return;
2905
2929
  }
2906
- await this.syncMultiPortalStorageItem(multiPortal, options);
2930
+ await this.syncMultiPortalStorageItem(multiPortal, options, false, true);
2907
2931
  });
2908
2932
  this.app.db.on("multiPortals.afterUpdate", async (multiPortal, options) => {
2909
2933
  await this.publishAppManifestItem(multiPortal, options);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocobase/plugin-multi-portal",
3
- "version": "2.2.0-alpha.12",
3
+ "version": "3.0.0-alpha.2",
4
4
  "main": "dist/server/index.js",
5
5
  "nocobase": {
6
6
  "supportedVersions": [
@@ -13,7 +13,7 @@
13
13
  "description.zh-CN": "为 Client V2 提供内置 Portal 注册、入口访问与路由权限管理。",
14
14
  "devDependencies": {
15
15
  "@ant-design/icons": "5.x",
16
- "@nocobase/plugin-ui-layout": "2.2.0-alpha.12",
16
+ "@nocobase/plugin-ui-layout": "3.0.0-alpha.2",
17
17
  "ahooks": "3.x",
18
18
  "antd": "5.x",
19
19
  "react": "^18.2.0",
@@ -29,5 +29,5 @@
29
29
  "@nocobase/server": "2.x",
30
30
  "@nocobase/test": "2.x"
31
31
  },
32
- "gitHead": "96ae69754a6398de63037ead3a4aad5e5d0ab918"
32
+ "gitHead": "a3faea21082b30989301de04591ee1b91fd4e6a5"
33
33
  }