@nocobase/plugin-multi-portal 2.2.0-alpha.10

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.
Files changed (217) hide show
  1. package/LICENSE.txt +107 -0
  2. package/README.md +14 -0
  3. package/client-v2.d.ts +2 -0
  4. package/client-v2.js +1 -0
  5. package/client.d.ts +2 -0
  6. package/client.js +1 -0
  7. package/dist/client/index.d.ts +9 -0
  8. package/dist/client/index.js +10 -0
  9. package/dist/client/locale.d.ts +10 -0
  10. package/dist/client/models/index.d.ts +11 -0
  11. package/dist/client/plugin.d.ts +13 -0
  12. package/dist/client-v2/354.ead3e96143164cd5.js +10 -0
  13. package/dist/client-v2/499.ef2ff0c022687485.js +10 -0
  14. package/dist/client-v2/778.23ba409a924ee34a.js +10 -0
  15. package/dist/client-v2/845.f2b0ce44ae4be707.js +10 -0
  16. package/dist/client-v2/entryActions/PortalEntryActionModel.d.ts +52 -0
  17. package/dist/client-v2/entryActions/portalEntryActionStore.d.ts +36 -0
  18. package/dist/client-v2/entryActions/registerPortalEntryActions.d.ts +10 -0
  19. package/dist/client-v2/entryActions/types.d.ts +41 -0
  20. package/dist/client-v2/entryActions/url.d.ts +10 -0
  21. package/dist/client-v2/index.d.ts +9 -0
  22. package/dist/client-v2/index.js +10 -0
  23. package/dist/client-v2/layoutRegistration.d.ts +38 -0
  24. package/dist/client-v2/locale.d.ts +13 -0
  25. package/dist/client-v2/models/MultiPortalBlockModel.d.ts +13 -0
  26. package/dist/client-v2/models/MultiPortalMobilePageModels.d.ts +34 -0
  27. package/dist/client-v2/pages/MultiPortalsPage.d.ts +80 -0
  28. package/dist/client-v2/permissions/MultiPortalPermissionsTab.d.ts +21 -0
  29. package/dist/client-v2/permissions/multiPortalPermissions.d.ts +12 -0
  30. package/dist/client-v2/plugin.d.ts +13 -0
  31. package/dist/client-v2/routeRepositoryScope.d.ts +11 -0
  32. package/dist/client-v2/routeUrl.d.ts +18 -0
  33. package/dist/externalVersion.js +25 -0
  34. package/dist/index.d.ts +10 -0
  35. package/dist/index.js +48 -0
  36. package/dist/locale/en-US.json +82 -0
  37. package/dist/locale/zh-CN.json +82 -0
  38. package/dist/node_modules/tar/dist/commonjs/create.d.ts +3 -0
  39. package/dist/node_modules/tar/dist/commonjs/create.js +82 -0
  40. package/dist/node_modules/tar/dist/commonjs/cwd-error.d.ts +8 -0
  41. package/dist/node_modules/tar/dist/commonjs/cwd-error.js +18 -0
  42. package/dist/node_modules/tar/dist/commonjs/extract.d.ts +3 -0
  43. package/dist/node_modules/tar/dist/commonjs/extract.js +88 -0
  44. package/dist/node_modules/tar/dist/commonjs/get-write-flag.d.ts +2 -0
  45. package/dist/node_modules/tar/dist/commonjs/get-write-flag.js +32 -0
  46. package/dist/node_modules/tar/dist/commonjs/header.d.ts +53 -0
  47. package/dist/node_modules/tar/dist/commonjs/header.js +312 -0
  48. package/dist/node_modules/tar/dist/commonjs/index.d.ts +20 -0
  49. package/dist/node_modules/tar/dist/commonjs/index.js +64 -0
  50. package/dist/node_modules/tar/dist/commonjs/index.min.js +1 -0
  51. package/dist/node_modules/tar/dist/commonjs/large-numbers.d.ts +3 -0
  52. package/dist/node_modules/tar/dist/commonjs/large-numbers.js +99 -0
  53. package/dist/node_modules/tar/dist/commonjs/list.d.ts +7 -0
  54. package/dist/node_modules/tar/dist/commonjs/list.js +145 -0
  55. package/dist/node_modules/tar/dist/commonjs/make-command.d.ts +49 -0
  56. package/dist/node_modules/tar/dist/commonjs/make-command.js +52 -0
  57. package/dist/node_modules/tar/dist/commonjs/mkdir.d.ts +25 -0
  58. package/dist/node_modules/tar/dist/commonjs/mkdir.js +187 -0
  59. package/dist/node_modules/tar/dist/commonjs/mode-fix.d.ts +2 -0
  60. package/dist/node_modules/tar/dist/commonjs/mode-fix.js +29 -0
  61. package/dist/node_modules/tar/dist/commonjs/normalize-unicode.d.ts +2 -0
  62. package/dist/node_modules/tar/dist/commonjs/normalize-unicode.js +38 -0
  63. package/dist/node_modules/tar/dist/commonjs/normalize-windows-path.d.ts +2 -0
  64. package/dist/node_modules/tar/dist/commonjs/normalize-windows-path.js +12 -0
  65. package/dist/node_modules/tar/dist/commonjs/options.d.ts +596 -0
  66. package/dist/node_modules/tar/dist/commonjs/options.js +66 -0
  67. package/dist/node_modules/tar/dist/commonjs/pack.d.ts +105 -0
  68. package/dist/node_modules/tar/dist/commonjs/pack.js +545 -0
  69. package/dist/node_modules/tar/dist/commonjs/package.json +3 -0
  70. package/dist/node_modules/tar/dist/commonjs/parse.d.ts +85 -0
  71. package/dist/node_modules/tar/dist/commonjs/parse.js +610 -0
  72. package/dist/node_modules/tar/dist/commonjs/path-reservations.d.ts +11 -0
  73. package/dist/node_modules/tar/dist/commonjs/path-reservations.js +170 -0
  74. package/dist/node_modules/tar/dist/commonjs/pax.d.ts +26 -0
  75. package/dist/node_modules/tar/dist/commonjs/pax.js +158 -0
  76. package/dist/node_modules/tar/dist/commonjs/process-umask.d.ts +2 -0
  77. package/dist/node_modules/tar/dist/commonjs/process-umask.js +7 -0
  78. package/dist/node_modules/tar/dist/commonjs/read-entry.d.ts +36 -0
  79. package/dist/node_modules/tar/dist/commonjs/read-entry.js +136 -0
  80. package/dist/node_modules/tar/dist/commonjs/replace.d.ts +2 -0
  81. package/dist/node_modules/tar/dist/commonjs/replace.js +227 -0
  82. package/dist/node_modules/tar/dist/commonjs/strip-absolute-path.d.ts +2 -0
  83. package/dist/node_modules/tar/dist/commonjs/strip-absolute-path.js +29 -0
  84. package/dist/node_modules/tar/dist/commonjs/strip-trailing-slashes.d.ts +2 -0
  85. package/dist/node_modules/tar/dist/commonjs/strip-trailing-slashes.js +18 -0
  86. package/dist/node_modules/tar/dist/commonjs/symlink-error.d.ts +9 -0
  87. package/dist/node_modules/tar/dist/commonjs/symlink-error.js +19 -0
  88. package/dist/node_modules/tar/dist/commonjs/types.d.ts +7 -0
  89. package/dist/node_modules/tar/dist/commonjs/types.js +50 -0
  90. package/dist/node_modules/tar/dist/commonjs/unpack.d.ts +101 -0
  91. package/dist/node_modules/tar/dist/commonjs/unpack.js +932 -0
  92. package/dist/node_modules/tar/dist/commonjs/update.d.ts +2 -0
  93. package/dist/node_modules/tar/dist/commonjs/update.js +33 -0
  94. package/dist/node_modules/tar/dist/commonjs/warn-method.d.ts +24 -0
  95. package/dist/node_modules/tar/dist/commonjs/warn-method.js +31 -0
  96. package/dist/node_modules/tar/dist/commonjs/winchars.d.ts +3 -0
  97. package/dist/node_modules/tar/dist/commonjs/winchars.js +14 -0
  98. package/dist/node_modules/tar/dist/commonjs/write-entry.d.ts +129 -0
  99. package/dist/node_modules/tar/dist/commonjs/write-entry.js +698 -0
  100. package/dist/node_modules/tar/dist/esm/create.d.ts +3 -0
  101. package/dist/node_modules/tar/dist/esm/create.js +76 -0
  102. package/dist/node_modules/tar/dist/esm/cwd-error.d.ts +8 -0
  103. package/dist/node_modules/tar/dist/esm/cwd-error.js +14 -0
  104. package/dist/node_modules/tar/dist/esm/extract.d.ts +3 -0
  105. package/dist/node_modules/tar/dist/esm/extract.js +49 -0
  106. package/dist/node_modules/tar/dist/esm/get-write-flag.d.ts +2 -0
  107. package/dist/node_modules/tar/dist/esm/get-write-flag.js +26 -0
  108. package/dist/node_modules/tar/dist/esm/header.d.ts +53 -0
  109. package/dist/node_modules/tar/dist/esm/header.js +275 -0
  110. package/dist/node_modules/tar/dist/esm/index.d.ts +20 -0
  111. package/dist/node_modules/tar/dist/esm/index.js +20 -0
  112. package/dist/node_modules/tar/dist/esm/index.min.js +4 -0
  113. package/dist/node_modules/tar/dist/esm/large-numbers.d.ts +3 -0
  114. package/dist/node_modules/tar/dist/esm/large-numbers.js +94 -0
  115. package/dist/node_modules/tar/dist/esm/list.d.ts +7 -0
  116. package/dist/node_modules/tar/dist/esm/list.js +105 -0
  117. package/dist/node_modules/tar/dist/esm/make-command.d.ts +49 -0
  118. package/dist/node_modules/tar/dist/esm/make-command.js +48 -0
  119. package/dist/node_modules/tar/dist/esm/mkdir.d.ts +25 -0
  120. package/dist/node_modules/tar/dist/esm/mkdir.js +179 -0
  121. package/dist/node_modules/tar/dist/esm/mode-fix.d.ts +2 -0
  122. package/dist/node_modules/tar/dist/esm/mode-fix.js +25 -0
  123. package/dist/node_modules/tar/dist/esm/normalize-unicode.d.ts +2 -0
  124. package/dist/node_modules/tar/dist/esm/normalize-unicode.js +34 -0
  125. package/dist/node_modules/tar/dist/esm/normalize-windows-path.d.ts +2 -0
  126. package/dist/node_modules/tar/dist/esm/normalize-windows-path.js +9 -0
  127. package/dist/node_modules/tar/dist/esm/options.d.ts +596 -0
  128. package/dist/node_modules/tar/dist/esm/options.js +54 -0
  129. package/dist/node_modules/tar/dist/esm/pack.d.ts +105 -0
  130. package/dist/node_modules/tar/dist/esm/pack.js +503 -0
  131. package/dist/node_modules/tar/dist/esm/package.json +3 -0
  132. package/dist/node_modules/tar/dist/esm/parse.d.ts +85 -0
  133. package/dist/node_modules/tar/dist/esm/parse.js +606 -0
  134. package/dist/node_modules/tar/dist/esm/path-reservations.d.ts +11 -0
  135. package/dist/node_modules/tar/dist/esm/path-reservations.js +166 -0
  136. package/dist/node_modules/tar/dist/esm/pax.d.ts +26 -0
  137. package/dist/node_modules/tar/dist/esm/pax.js +154 -0
  138. package/dist/node_modules/tar/dist/esm/process-umask.d.ts +2 -0
  139. package/dist/node_modules/tar/dist/esm/process-umask.js +3 -0
  140. package/dist/node_modules/tar/dist/esm/read-entry.d.ts +36 -0
  141. package/dist/node_modules/tar/dist/esm/read-entry.js +132 -0
  142. package/dist/node_modules/tar/dist/esm/replace.d.ts +2 -0
  143. package/dist/node_modules/tar/dist/esm/replace.js +221 -0
  144. package/dist/node_modules/tar/dist/esm/strip-absolute-path.d.ts +2 -0
  145. package/dist/node_modules/tar/dist/esm/strip-absolute-path.js +25 -0
  146. package/dist/node_modules/tar/dist/esm/strip-trailing-slashes.d.ts +2 -0
  147. package/dist/node_modules/tar/dist/esm/strip-trailing-slashes.js +14 -0
  148. package/dist/node_modules/tar/dist/esm/symlink-error.d.ts +9 -0
  149. package/dist/node_modules/tar/dist/esm/symlink-error.js +15 -0
  150. package/dist/node_modules/tar/dist/esm/types.d.ts +7 -0
  151. package/dist/node_modules/tar/dist/esm/types.js +45 -0
  152. package/dist/node_modules/tar/dist/esm/unpack.d.ts +101 -0
  153. package/dist/node_modules/tar/dist/esm/unpack.js +891 -0
  154. package/dist/node_modules/tar/dist/esm/update.d.ts +2 -0
  155. package/dist/node_modules/tar/dist/esm/update.js +30 -0
  156. package/dist/node_modules/tar/dist/esm/warn-method.d.ts +24 -0
  157. package/dist/node_modules/tar/dist/esm/warn-method.js +27 -0
  158. package/dist/node_modules/tar/dist/esm/winchars.d.ts +3 -0
  159. package/dist/node_modules/tar/dist/esm/winchars.js +9 -0
  160. package/dist/node_modules/tar/dist/esm/write-entry.d.ts +129 -0
  161. package/dist/node_modules/tar/dist/esm/write-entry.js +656 -0
  162. package/dist/node_modules/tar/node_modules/chownr/dist/commonjs/index.d.ts +3 -0
  163. package/dist/node_modules/tar/node_modules/chownr/dist/commonjs/index.js +93 -0
  164. package/dist/node_modules/tar/node_modules/chownr/dist/commonjs/package.json +3 -0
  165. package/dist/node_modules/tar/node_modules/chownr/dist/esm/index.d.ts +3 -0
  166. package/dist/node_modules/tar/node_modules/chownr/dist/esm/index.js +85 -0
  167. package/dist/node_modules/tar/node_modules/chownr/dist/esm/package.json +3 -0
  168. package/dist/node_modules/tar/node_modules/chownr/package.json +69 -0
  169. package/dist/node_modules/tar/node_modules/minipass/dist/commonjs/index.d.ts +549 -0
  170. package/dist/node_modules/tar/node_modules/minipass/dist/commonjs/index.js +1028 -0
  171. package/dist/node_modules/tar/node_modules/minipass/dist/commonjs/package.json +3 -0
  172. package/dist/node_modules/tar/node_modules/minipass/dist/esm/index.d.ts +549 -0
  173. package/dist/node_modules/tar/node_modules/minipass/dist/esm/index.js +1018 -0
  174. package/dist/node_modules/tar/node_modules/minipass/dist/esm/package.json +3 -0
  175. package/dist/node_modules/tar/node_modules/minipass/package.json +82 -0
  176. package/dist/node_modules/tar/node_modules/minizlib/dist/commonjs/constants.d.ts +2 -0
  177. package/dist/node_modules/tar/node_modules/minizlib/dist/commonjs/constants.js +123 -0
  178. package/dist/node_modules/tar/node_modules/minizlib/dist/commonjs/index.d.ts +99 -0
  179. package/dist/node_modules/tar/node_modules/minizlib/dist/commonjs/index.js +416 -0
  180. package/dist/node_modules/tar/node_modules/minizlib/dist/commonjs/package.json +3 -0
  181. package/dist/node_modules/tar/node_modules/minizlib/dist/esm/constants.d.ts +2 -0
  182. package/dist/node_modules/tar/node_modules/minizlib/dist/esm/constants.js +117 -0
  183. package/dist/node_modules/tar/node_modules/minizlib/dist/esm/index.d.ts +99 -0
  184. package/dist/node_modules/tar/node_modules/minizlib/dist/esm/index.js +363 -0
  185. package/dist/node_modules/tar/node_modules/minizlib/dist/esm/package.json +3 -0
  186. package/dist/node_modules/tar/node_modules/minizlib/package.json +80 -0
  187. package/dist/node_modules/tar/node_modules/yallist/dist/commonjs/index.d.ts +39 -0
  188. package/dist/node_modules/tar/node_modules/yallist/dist/commonjs/index.js +384 -0
  189. package/dist/node_modules/tar/node_modules/yallist/dist/commonjs/package.json +3 -0
  190. package/dist/node_modules/tar/node_modules/yallist/dist/esm/index.d.ts +39 -0
  191. package/dist/node_modules/tar/node_modules/yallist/dist/esm/index.js +379 -0
  192. package/dist/node_modules/tar/node_modules/yallist/dist/esm/package.json +3 -0
  193. package/dist/node_modules/tar/node_modules/yallist/package.json +68 -0
  194. package/dist/node_modules/tar/package.json +1 -0
  195. package/dist/server/collections/desktopRoutes.d.ts +14 -0
  196. package/dist/server/collections/desktopRoutes.js +48 -0
  197. package/dist/server/collections/extendRoleField.d.ts +14 -0
  198. package/dist/server/collections/extendRoleField.js +51 -0
  199. package/dist/server/collections/multiPortals.d.ts +10 -0
  200. package/dist/server/collections/multiPortals.js +128 -0
  201. package/dist/server/collections/rolesMultiPortalDesktopRoutes.d.ts +10 -0
  202. package/dist/server/collections/rolesMultiPortalDesktopRoutes.js +76 -0
  203. package/dist/server/collections/rolesMultiPortalRoutePolicies.d.ts +10 -0
  204. package/dist/server/collections/rolesMultiPortalRoutePolicies.js +73 -0
  205. package/dist/server/collections/rolesMultiPortals.d.ts +10 -0
  206. package/dist/server/collections/rolesMultiPortals.js +68 -0
  207. package/dist/server/ensureDefaultRoleMultiPortalAccess.d.ts +11 -0
  208. package/dist/server/ensureDefaultRoleMultiPortalAccess.js +70 -0
  209. package/dist/server/index.d.ts +9 -0
  210. package/dist/server/index.js +42 -0
  211. package/dist/server/migrations/20260723105200-drop-ui-layout-foreign-key-constraint.d.ts +13 -0
  212. package/dist/server/migrations/20260723105200-drop-ui-layout-foreign-key-constraint.js +104 -0
  213. package/dist/server/plugin.d.ts +63 -0
  214. package/dist/server/plugin.js +2130 -0
  215. package/package.json +34 -0
  216. package/server.d.ts +2 -0
  217. package/server.js +1 -0
@@ -0,0 +1,656 @@
1
+ import fs from 'fs';
2
+ import { Minipass } from 'minipass';
3
+ import path from 'path';
4
+ import { Header } from './header.js';
5
+ import { modeFix } from './mode-fix.js';
6
+ import { normalizeWindowsPath } from './normalize-windows-path.js';
7
+ import { dealias } from './options.js';
8
+ import { Pax } from './pax.js';
9
+ import { stripAbsolutePath } from './strip-absolute-path.js';
10
+ import { stripTrailingSlashes } from './strip-trailing-slashes.js';
11
+ import { warnMethod } from './warn-method.js';
12
+ import * as winchars from './winchars.js';
13
+ const prefixPath = (path, prefix) => {
14
+ if (!prefix) {
15
+ return normalizeWindowsPath(path);
16
+ }
17
+ path = normalizeWindowsPath(path).replace(/^\.(\/|$)/, '');
18
+ return stripTrailingSlashes(prefix) + '/' + path;
19
+ };
20
+ const maxReadSize = 16 * 1024 * 1024;
21
+ const PROCESS = Symbol('process');
22
+ const FILE = Symbol('file');
23
+ const DIRECTORY = Symbol('directory');
24
+ const SYMLINK = Symbol('symlink');
25
+ const HARDLINK = Symbol('hardlink');
26
+ const HEADER = Symbol('header');
27
+ const READ = Symbol('read');
28
+ const LSTAT = Symbol('lstat');
29
+ const ONLSTAT = Symbol('onlstat');
30
+ const ONREAD = Symbol('onread');
31
+ const ONREADLINK = Symbol('onreadlink');
32
+ const OPENFILE = Symbol('openfile');
33
+ const ONOPENFILE = Symbol('onopenfile');
34
+ const CLOSE = Symbol('close');
35
+ const MODE = Symbol('mode');
36
+ const AWAITDRAIN = Symbol('awaitDrain');
37
+ const ONDRAIN = Symbol('ondrain');
38
+ const PREFIX = Symbol('prefix');
39
+ export class WriteEntry extends Minipass {
40
+ path;
41
+ portable;
42
+ myuid = (process.getuid && process.getuid()) || 0;
43
+ // until node has builtin pwnam functions, this'll have to do
44
+ myuser = process.env.USER || '';
45
+ maxReadSize;
46
+ linkCache;
47
+ statCache;
48
+ preservePaths;
49
+ cwd;
50
+ strict;
51
+ mtime;
52
+ noPax;
53
+ noMtime;
54
+ prefix;
55
+ fd;
56
+ blockLen = 0;
57
+ blockRemain = 0;
58
+ buf;
59
+ pos = 0;
60
+ remain = 0;
61
+ length = 0;
62
+ offset = 0;
63
+ win32;
64
+ absolute;
65
+ header;
66
+ type;
67
+ linkpath;
68
+ stat;
69
+ onWriteEntry;
70
+ #hadError = false;
71
+ constructor(p, opt_ = {}) {
72
+ const opt = dealias(opt_);
73
+ super();
74
+ this.path = normalizeWindowsPath(p);
75
+ // suppress atime, ctime, uid, gid, uname, gname
76
+ this.portable = !!opt.portable;
77
+ this.maxReadSize = opt.maxReadSize || maxReadSize;
78
+ this.linkCache = opt.linkCache || new Map();
79
+ this.statCache = opt.statCache || new Map();
80
+ this.preservePaths = !!opt.preservePaths;
81
+ this.cwd = normalizeWindowsPath(opt.cwd || process.cwd());
82
+ this.strict = !!opt.strict;
83
+ this.noPax = !!opt.noPax;
84
+ this.noMtime = !!opt.noMtime;
85
+ this.mtime = opt.mtime;
86
+ this.prefix = opt.prefix ? normalizeWindowsPath(opt.prefix) : undefined;
87
+ this.onWriteEntry = opt.onWriteEntry;
88
+ if (typeof opt.onwarn === 'function') {
89
+ this.on('warn', opt.onwarn);
90
+ }
91
+ let pathWarn = false;
92
+ if (!this.preservePaths) {
93
+ const [root, stripped] = stripAbsolutePath(this.path);
94
+ if (root && typeof stripped === 'string') {
95
+ this.path = stripped;
96
+ pathWarn = root;
97
+ }
98
+ }
99
+ this.win32 = !!opt.win32 || process.platform === 'win32';
100
+ if (this.win32) {
101
+ // force the \ to / normalization, since we might not *actually*
102
+ // be on windows, but want \ to be considered a path separator.
103
+ this.path = winchars.decode(this.path.replaceAll(/\\/g, '/'));
104
+ p = p.replaceAll(/\\/g, '/');
105
+ }
106
+ this.absolute = normalizeWindowsPath(opt.absolute || path.resolve(this.cwd, p));
107
+ if (this.path === '') {
108
+ this.path = './';
109
+ }
110
+ if (pathWarn) {
111
+ this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {
112
+ entry: this,
113
+ path: pathWarn + this.path,
114
+ });
115
+ }
116
+ const cs = this.statCache.get(this.absolute);
117
+ if (cs) {
118
+ this[ONLSTAT](cs);
119
+ }
120
+ else {
121
+ this[LSTAT]();
122
+ }
123
+ }
124
+ warn(code, message, data = {}) {
125
+ return warnMethod(this, code, message, data);
126
+ }
127
+ emit(ev, ...data) {
128
+ if (ev === 'error') {
129
+ this.#hadError = true;
130
+ }
131
+ return super.emit(ev, ...data);
132
+ }
133
+ [LSTAT]() {
134
+ fs.lstat(this.absolute, (er, stat) => {
135
+ if (er) {
136
+ return this.emit('error', er);
137
+ }
138
+ this[ONLSTAT](stat);
139
+ });
140
+ }
141
+ [ONLSTAT](stat) {
142
+ this.statCache.set(this.absolute, stat);
143
+ this.stat = stat;
144
+ if (!stat.isFile()) {
145
+ stat.size = 0;
146
+ }
147
+ this.type = getType(stat);
148
+ this.emit('stat', stat);
149
+ this[PROCESS]();
150
+ }
151
+ [PROCESS]() {
152
+ switch (this.type) {
153
+ case 'File':
154
+ return this[FILE]();
155
+ case 'Directory':
156
+ return this[DIRECTORY]();
157
+ case 'SymbolicLink':
158
+ return this[SYMLINK]();
159
+ // unsupported types are ignored.
160
+ default:
161
+ return this.end();
162
+ }
163
+ }
164
+ [MODE](mode) {
165
+ return modeFix(mode, this.type === 'Directory', this.portable);
166
+ }
167
+ [PREFIX](path) {
168
+ return prefixPath(path, this.prefix);
169
+ }
170
+ [HEADER]() {
171
+ /* c8 ignore start */
172
+ if (!this.stat) {
173
+ throw new Error('cannot write header before stat');
174
+ }
175
+ /* c8 ignore stop */
176
+ if (this.type === 'Directory' && this.portable) {
177
+ this.noMtime = true;
178
+ }
179
+ this.onWriteEntry?.(this);
180
+ this.header = new Header({
181
+ path: this[PREFIX](this.path),
182
+ // only apply the prefix to hard links.
183
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
184
+ this[PREFIX](this.linkpath)
185
+ : this.linkpath,
186
+ // only the permissions and setuid/setgid/sticky bitflags
187
+ // not the higher-order bits that specify file type
188
+ mode: this[MODE](this.stat.mode),
189
+ uid: this.portable ? undefined : this.stat.uid,
190
+ gid: this.portable ? undefined : this.stat.gid,
191
+ size: this.stat.size,
192
+ mtime: this.noMtime ? undefined : this.mtime || this.stat.mtime,
193
+ /* c8 ignore next */
194
+ type: this.type === 'Unsupported' ? undefined : this.type,
195
+ uname: this.portable ? undefined
196
+ : this.stat.uid === this.myuid ? this.myuser
197
+ : '',
198
+ atime: this.portable ? undefined : this.stat.atime,
199
+ ctime: this.portable ? undefined : this.stat.ctime,
200
+ });
201
+ if (this.header.encode() && !this.noPax) {
202
+ super.write(new Pax({
203
+ atime: this.portable ? undefined : this.header.atime,
204
+ ctime: this.portable ? undefined : this.header.ctime,
205
+ gid: this.portable ? undefined : this.header.gid,
206
+ mtime: this.noMtime ? undefined : this.mtime || this.header.mtime,
207
+ path: this[PREFIX](this.path),
208
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
209
+ this[PREFIX](this.linkpath)
210
+ : this.linkpath,
211
+ size: this.header.size,
212
+ uid: this.portable ? undefined : this.header.uid,
213
+ uname: this.portable ? undefined : this.header.uname,
214
+ dev: this.portable ? undefined : this.stat.dev,
215
+ ino: this.portable ? undefined : this.stat.ino,
216
+ nlink: this.portable ? undefined : this.stat.nlink,
217
+ }).encode());
218
+ }
219
+ const block = this.header?.block;
220
+ /* c8 ignore start */
221
+ if (!block) {
222
+ throw new Error('failed to encode header');
223
+ }
224
+ /* c8 ignore stop */
225
+ super.write(block);
226
+ }
227
+ [DIRECTORY]() {
228
+ /* c8 ignore start */
229
+ if (!this.stat) {
230
+ throw new Error('cannot create directory entry without stat');
231
+ }
232
+ /* c8 ignore stop */
233
+ if (this.path.slice(-1) !== '/') {
234
+ this.path += '/';
235
+ }
236
+ this.stat.size = 0;
237
+ this[HEADER]();
238
+ this.end();
239
+ }
240
+ [SYMLINK]() {
241
+ fs.readlink(this.absolute, (er, linkpath) => {
242
+ if (er) {
243
+ return this.emit('error', er);
244
+ }
245
+ this[ONREADLINK](linkpath);
246
+ });
247
+ }
248
+ [ONREADLINK](linkpath) {
249
+ this.linkpath = normalizeWindowsPath(linkpath);
250
+ this[HEADER]();
251
+ this.end();
252
+ }
253
+ [HARDLINK](linkpath) {
254
+ /* c8 ignore start */
255
+ if (!this.stat) {
256
+ throw new Error('cannot create link entry without stat');
257
+ }
258
+ /* c8 ignore stop */
259
+ this.type = 'Link';
260
+ this.linkpath = normalizeWindowsPath(path.relative(this.cwd, linkpath));
261
+ this.stat.size = 0;
262
+ this[HEADER]();
263
+ this.end();
264
+ }
265
+ [FILE]() {
266
+ /* c8 ignore start */
267
+ if (!this.stat) {
268
+ throw new Error('cannot create file entry without stat');
269
+ }
270
+ /* c8 ignore stop */
271
+ if (this.stat.nlink > 1) {
272
+ const linkKey = `${this.stat.dev}:${this.stat.ino}`;
273
+ const linkpath = this.linkCache.get(linkKey);
274
+ if (linkpath?.indexOf(this.cwd) === 0) {
275
+ return this[HARDLINK](linkpath);
276
+ }
277
+ this.linkCache.set(linkKey, this.absolute);
278
+ }
279
+ this[HEADER]();
280
+ if (this.stat.size === 0) {
281
+ return this.end();
282
+ }
283
+ this[OPENFILE]();
284
+ }
285
+ [OPENFILE]() {
286
+ fs.open(this.absolute, 'r', (er, fd) => {
287
+ if (er) {
288
+ return this.emit('error', er);
289
+ }
290
+ this[ONOPENFILE](fd);
291
+ });
292
+ }
293
+ [ONOPENFILE](fd) {
294
+ this.fd = fd;
295
+ if (this.#hadError) {
296
+ return this[CLOSE]();
297
+ }
298
+ /* c8 ignore start */
299
+ if (!this.stat) {
300
+ throw new Error('should stat before calling onopenfile');
301
+ }
302
+ /* c8 ignore start */
303
+ this.blockLen = 512 * Math.ceil(this.stat.size / 512);
304
+ this.blockRemain = this.blockLen;
305
+ const bufLen = Math.min(this.blockLen, this.maxReadSize);
306
+ this.buf = Buffer.allocUnsafe(bufLen);
307
+ this.offset = 0;
308
+ this.pos = 0;
309
+ this.remain = this.stat.size;
310
+ this.length = this.buf.length;
311
+ this[READ]();
312
+ }
313
+ [READ]() {
314
+ const { fd, buf, offset, length, pos } = this;
315
+ if (fd === undefined || buf === undefined) {
316
+ throw new Error('cannot read file without first opening');
317
+ }
318
+ fs.read(fd, buf, offset, length, pos, (er, bytesRead) => {
319
+ if (er) {
320
+ // ignoring the error from close(2) is a bad practice, but at
321
+ // this point we already have an error, don't need another one
322
+ return this[CLOSE](() => this.emit('error', er));
323
+ }
324
+ this[ONREAD](bytesRead);
325
+ });
326
+ }
327
+ /* c8 ignore start */
328
+ [CLOSE](cb = () => { }) {
329
+ /* c8 ignore stop */
330
+ if (this.fd !== undefined)
331
+ fs.close(this.fd, cb);
332
+ }
333
+ [ONREAD](bytesRead) {
334
+ if (bytesRead <= 0 && this.remain > 0) {
335
+ const er = Object.assign(new Error('encountered unexpected EOF'), {
336
+ path: this.absolute,
337
+ syscall: 'read',
338
+ code: 'EOF',
339
+ });
340
+ return this[CLOSE](() => this.emit('error', er));
341
+ }
342
+ if (bytesRead > this.remain) {
343
+ const er = Object.assign(new Error('did not encounter expected EOF'), {
344
+ path: this.absolute,
345
+ syscall: 'read',
346
+ code: 'EOF',
347
+ });
348
+ return this[CLOSE](() => this.emit('error', er));
349
+ }
350
+ /* c8 ignore start */
351
+ if (!this.buf) {
352
+ throw new Error('should have created buffer prior to reading');
353
+ }
354
+ /* c8 ignore stop */
355
+ // null out the rest of the buffer, if we could fit the block padding
356
+ // at the end of this loop, we've incremented bytesRead and this.remain
357
+ // to be incremented up to the blockRemain level, as if we had expected
358
+ // to get a null-padded file, and read it until the end. then we will
359
+ // decrement both remain and blockRemain by bytesRead, and know that we
360
+ // reached the expected EOF, without any null buffer to append.
361
+ if (bytesRead === this.remain) {
362
+ for (let i = bytesRead; i < this.length && bytesRead < this.blockRemain; i++) {
363
+ this.buf[i + this.offset] = 0;
364
+ bytesRead++;
365
+ this.remain++;
366
+ }
367
+ }
368
+ const chunk = this.offset === 0 && bytesRead === this.buf.length ?
369
+ this.buf
370
+ : this.buf.subarray(this.offset, this.offset + bytesRead);
371
+ const flushed = this.write(chunk);
372
+ if (!flushed) {
373
+ this[AWAITDRAIN](() => this[ONDRAIN]());
374
+ }
375
+ else {
376
+ this[ONDRAIN]();
377
+ }
378
+ }
379
+ [AWAITDRAIN](cb) {
380
+ this.once('drain', cb);
381
+ }
382
+ write(chunk, encoding, cb) {
383
+ /* c8 ignore start - just junk to comply with NodeJS.WritableStream */
384
+ if (typeof encoding === 'function') {
385
+ cb = encoding;
386
+ encoding = undefined;
387
+ }
388
+ if (typeof chunk === 'string') {
389
+ chunk = Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8');
390
+ }
391
+ /* c8 ignore stop */
392
+ if (this.blockRemain < chunk.length) {
393
+ const er = Object.assign(new Error('writing more data than expected'), {
394
+ path: this.absolute,
395
+ });
396
+ return this.emit('error', er);
397
+ }
398
+ this.remain -= chunk.length;
399
+ this.blockRemain -= chunk.length;
400
+ this.pos += chunk.length;
401
+ this.offset += chunk.length;
402
+ return super.write(chunk, null, cb);
403
+ }
404
+ [ONDRAIN]() {
405
+ if (!this.remain) {
406
+ if (this.blockRemain) {
407
+ super.write(Buffer.alloc(this.blockRemain));
408
+ }
409
+ return this[CLOSE](er => (er ? this.emit('error', er) : this.end()));
410
+ }
411
+ /* c8 ignore start */
412
+ if (!this.buf) {
413
+ throw new Error('buffer lost somehow in ONDRAIN');
414
+ }
415
+ /* c8 ignore stop */
416
+ if (this.offset >= this.length) {
417
+ // if we only have a smaller bit left to read, alloc a smaller buffer
418
+ // otherwise, keep it the same length it was before.
419
+ this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length));
420
+ this.offset = 0;
421
+ }
422
+ this.length = this.buf.length - this.offset;
423
+ this[READ]();
424
+ }
425
+ }
426
+ export class WriteEntrySync extends WriteEntry {
427
+ sync = true;
428
+ [LSTAT]() {
429
+ this[ONLSTAT](fs.lstatSync(this.absolute));
430
+ }
431
+ [SYMLINK]() {
432
+ this[ONREADLINK](fs.readlinkSync(this.absolute));
433
+ }
434
+ [OPENFILE]() {
435
+ this[ONOPENFILE](fs.openSync(this.absolute, 'r'));
436
+ }
437
+ [READ]() {
438
+ let threw = true;
439
+ try {
440
+ const { fd, buf, offset, length, pos } = this;
441
+ /* c8 ignore start */
442
+ if (fd === undefined || buf === undefined) {
443
+ throw new Error('fd and buf must be set in READ method');
444
+ }
445
+ /* c8 ignore stop */
446
+ const bytesRead = fs.readSync(fd, buf, offset, length, pos);
447
+ this[ONREAD](bytesRead);
448
+ threw = false;
449
+ }
450
+ finally {
451
+ // ignoring the error from close(2) is a bad practice, but at
452
+ // this point we already have an error, don't need another one
453
+ if (threw) {
454
+ try {
455
+ this[CLOSE](() => { });
456
+ }
457
+ catch { }
458
+ }
459
+ }
460
+ }
461
+ [AWAITDRAIN](cb) {
462
+ cb();
463
+ }
464
+ /* c8 ignore start */
465
+ [CLOSE](cb = () => { }) {
466
+ /* c8 ignore stop */
467
+ if (this.fd !== undefined)
468
+ fs.closeSync(this.fd);
469
+ cb();
470
+ }
471
+ }
472
+ export class WriteEntryTar extends Minipass {
473
+ blockLen = 0;
474
+ blockRemain = 0;
475
+ buf = 0;
476
+ pos = 0;
477
+ remain = 0;
478
+ length = 0;
479
+ preservePaths;
480
+ portable;
481
+ strict;
482
+ noPax;
483
+ noMtime;
484
+ readEntry;
485
+ type;
486
+ prefix;
487
+ path;
488
+ mode;
489
+ uid;
490
+ gid;
491
+ uname;
492
+ gname;
493
+ header;
494
+ mtime;
495
+ atime;
496
+ ctime;
497
+ linkpath;
498
+ size;
499
+ onWriteEntry;
500
+ warn(code, message, data = {}) {
501
+ return warnMethod(this, code, message, data);
502
+ }
503
+ constructor(readEntry, opt_ = {}) {
504
+ const opt = dealias(opt_);
505
+ super();
506
+ this.preservePaths = !!opt.preservePaths;
507
+ this.portable = !!opt.portable;
508
+ this.strict = !!opt.strict;
509
+ this.noPax = !!opt.noPax;
510
+ this.noMtime = !!opt.noMtime;
511
+ this.onWriteEntry = opt.onWriteEntry;
512
+ this.readEntry = readEntry;
513
+ const { type } = readEntry;
514
+ /* c8 ignore start */
515
+ if (type === 'Unsupported') {
516
+ throw new Error('writing entry that should be ignored');
517
+ }
518
+ /* c8 ignore stop */
519
+ this.type = type;
520
+ if (this.type === 'Directory' && this.portable) {
521
+ this.noMtime = true;
522
+ }
523
+ this.prefix = opt.prefix;
524
+ this.path = normalizeWindowsPath(readEntry.path);
525
+ this.mode =
526
+ readEntry.mode !== undefined ? this[MODE](readEntry.mode) : undefined;
527
+ this.uid = this.portable ? undefined : readEntry.uid;
528
+ this.gid = this.portable ? undefined : readEntry.gid;
529
+ this.uname = this.portable ? undefined : readEntry.uname;
530
+ this.gname = this.portable ? undefined : readEntry.gname;
531
+ this.size = readEntry.size;
532
+ this.mtime = this.noMtime ? undefined : opt.mtime || readEntry.mtime;
533
+ this.atime = this.portable ? undefined : readEntry.atime;
534
+ this.ctime = this.portable ? undefined : readEntry.ctime;
535
+ this.linkpath =
536
+ readEntry.linkpath !== undefined ?
537
+ normalizeWindowsPath(readEntry.linkpath)
538
+ : undefined;
539
+ if (typeof opt.onwarn === 'function') {
540
+ this.on('warn', opt.onwarn);
541
+ }
542
+ let pathWarn = false;
543
+ if (!this.preservePaths) {
544
+ const [root, stripped] = stripAbsolutePath(this.path);
545
+ if (root && typeof stripped === 'string') {
546
+ this.path = stripped;
547
+ pathWarn = root;
548
+ }
549
+ }
550
+ this.remain = readEntry.size;
551
+ this.blockRemain = readEntry.startBlockSize;
552
+ this.onWriteEntry?.(this);
553
+ this.header = new Header({
554
+ path: this[PREFIX](this.path),
555
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
556
+ this[PREFIX](this.linkpath)
557
+ : this.linkpath,
558
+ // only the permissions and setuid/setgid/sticky bitflags
559
+ // not the higher-order bits that specify file type
560
+ mode: this.mode,
561
+ uid: this.portable ? undefined : this.uid,
562
+ gid: this.portable ? undefined : this.gid,
563
+ size: this.size,
564
+ mtime: this.noMtime ? undefined : this.mtime,
565
+ type: this.type,
566
+ uname: this.portable ? undefined : this.uname,
567
+ atime: this.portable ? undefined : this.atime,
568
+ ctime: this.portable ? undefined : this.ctime,
569
+ });
570
+ if (pathWarn) {
571
+ this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {
572
+ entry: this,
573
+ path: pathWarn + this.path,
574
+ });
575
+ }
576
+ if (this.header.encode() && !this.noPax) {
577
+ super.write(new Pax({
578
+ atime: this.portable ? undefined : this.atime,
579
+ ctime: this.portable ? undefined : this.ctime,
580
+ gid: this.portable ? undefined : this.gid,
581
+ mtime: this.noMtime ? undefined : this.mtime,
582
+ path: this[PREFIX](this.path),
583
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
584
+ this[PREFIX](this.linkpath)
585
+ : this.linkpath,
586
+ size: this.size,
587
+ uid: this.portable ? undefined : this.uid,
588
+ uname: this.portable ? undefined : this.uname,
589
+ dev: this.portable ? undefined : this.readEntry.dev,
590
+ ino: this.portable ? undefined : this.readEntry.ino,
591
+ nlink: this.portable ? undefined : this.readEntry.nlink,
592
+ }).encode());
593
+ }
594
+ const b = this.header?.block;
595
+ /* c8 ignore start */
596
+ if (!b)
597
+ throw new Error('failed to encode header');
598
+ /* c8 ignore stop */
599
+ super.write(b);
600
+ readEntry.pipe(this);
601
+ }
602
+ [PREFIX](path) {
603
+ return prefixPath(path, this.prefix);
604
+ }
605
+ [MODE](mode) {
606
+ return modeFix(mode, this.type === 'Directory', this.portable);
607
+ }
608
+ write(chunk, encoding, cb) {
609
+ /* c8 ignore start - just junk to comply with NodeJS.WritableStream */
610
+ if (typeof encoding === 'function') {
611
+ cb = encoding;
612
+ encoding = undefined;
613
+ }
614
+ if (typeof chunk === 'string') {
615
+ chunk = Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8');
616
+ }
617
+ /* c8 ignore stop */
618
+ const writeLen = chunk.length;
619
+ if (writeLen > this.blockRemain) {
620
+ throw new Error('writing more to entry than is appropriate');
621
+ }
622
+ this.blockRemain -= writeLen;
623
+ return super.write(chunk, cb);
624
+ }
625
+ end(chunk, encoding, cb) {
626
+ if (this.blockRemain) {
627
+ super.write(Buffer.alloc(this.blockRemain));
628
+ }
629
+ /* c8 ignore start - just junk to comply with NodeJS.WritableStream */
630
+ if (typeof chunk === 'function') {
631
+ cb = chunk;
632
+ encoding = undefined;
633
+ chunk = undefined;
634
+ }
635
+ if (typeof encoding === 'function') {
636
+ cb = encoding;
637
+ encoding = undefined;
638
+ }
639
+ if (typeof chunk === 'string') {
640
+ chunk = Buffer.from(chunk, encoding ?? 'utf8');
641
+ }
642
+ if (cb)
643
+ this.once('finish', cb);
644
+ if (chunk)
645
+ super.end(chunk, cb);
646
+ else
647
+ super.end(cb);
648
+ /* c8 ignore stop */
649
+ return this;
650
+ }
651
+ }
652
+ const getType = (stat) => stat.isFile() ? 'File'
653
+ : stat.isDirectory() ? 'Directory'
654
+ : stat.isSymbolicLink() ? 'SymbolicLink'
655
+ : 'Unsupported';
656
+ //# sourceMappingURL=write-entry.js.map
@@ -0,0 +1,3 @@
1
+ export declare const chownr: (p: string, uid: number, gid: number, cb: (er?: unknown) => any) => void;
2
+ export declare const chownrSync: (p: string, uid: number, gid: number) => void;
3
+ //# sourceMappingURL=index.d.ts.map