@lcap/nasl-unified-frontend-generator 4.0.0-rc.5 → 4.0.1-rc.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/dist/index.d.mts +15 -5
- package/dist/index.d.ts +15 -5
- package/dist/index.js +137 -161
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +133 -157
- package/dist/index.mjs.map +1 -1
- package/dist/playground.d.mts +1 -1
- package/dist/playground.d.ts +1 -1
- package/dist/playground.js +137 -161
- package/dist/playground.js.map +1 -1
- package/dist/playground.mjs +133 -157
- package/dist/playground.mjs.map +1 -1
- package/package.json +6 -6
package/dist/playground.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/universalify@2.0.1/node_modules/universalify/index.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/polyfills.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/legacy-streams.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/clone.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/graceful-fs.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/fs/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/mkdirs/utils.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/mkdirs/make-dir.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/mkdirs/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/path-exists/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/util/utimes.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/util/stat.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/copy/copy.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/copy/copy-sync.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/copy/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/remove/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/empty/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/file.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/link.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/symlink-paths.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/symlink-type.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/symlink.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/index.js","../../../node_modules/.pnpm/jsonfile@6.1.0/node_modules/jsonfile/utils.js","../../../node_modules/.pnpm/jsonfile@6.1.0/node_modules/jsonfile/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/jsonfile.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/output-file/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/output-json.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/output-json-sync.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/move/move.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/move/move-sync.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/move/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/index.js","../playground/helper.ts","../src/compile.ts","../src/default-container.ts","../src/plugins/vue/vue3/vue3-preset-plugin.ts","../src/service-metakind.ts","../src/utils/logger.ts","../src/utils/serialization.ts","../src/plugins/ir-builder-plugin.ts","../src/generator/genMetaData.ts","../src/generator/utils.ts","../src/utils/types.ts","../src/types/state.ts","../src/utils/assert.ts","../src/utils/component.ts","../src/utils/nasl.ts","../src/utils/str.ts","../src/utils/plugin.ts","../src/plugins/react/react-codegen-plugin.ts","../src/utils/json.ts","../src/utils/path.ts","../src/plugins/api-client-plugin.ts","../src/plugins/language/jsx-codegen-plugin.ts","../src/plugins/misc/code-format-plugin.ts","../src/plugins/misc/routes-extraction-plugin.ts","../src/plugins/react/react-component-lib-hack-plugin.ts","../src/plugins/react/react-router-plugin.ts","../src/plugins/language/javascript-codegen-plugin.ts","../src/plugins/language/asset/defaultErrorMessage.ts","../src/plugins/misc/logging/copied-log.ts","../src/plugins/misc/i18n-plugin.ts","../src/plugins/misc/metadata-plugin.ts","../src/hack/material-config/material.config.js","../src/hack/material-config/predefined-dependencies-manager.ts","../src/plugins/misc/entry-point/entry-point-plugin.ts","../src/plugins/react/react-preset-plugin.ts","../src/plugins/misc/file-system/file-system-plugin.ts","../src/plugins/misc/micro-frontend/micro-frontend-plugin.ts","../src/plugins/misc/micro-frontend/script/icestark.ts","../src/plugins/misc/micro-frontend/script/qiankun.ts","../src/plugins/misc/micro-frontend/script/wujie.ts","../src/plugins/misc/micro-frontend/script/microApp.ts","../src/plugins/misc/project-organization-plugin.ts","../src/plugins/misc/frontend-bundler-config-plugin.ts","../src/plugins/misc/frontend-performance-plugin.ts","../src/plugins/misc/life-cycle/life-cycle-plugin.ts","../src/plugins/misc/npm-package-manager-plugin.ts","../src/plugins/react/react-javascript-codegen-plugin.ts","../src/plugins/react/react-state-manager-vanilla-plugin.ts","../src/utils/syntax-node.ts","../src/plugins/react/react-state-manager-mobx-plugin.ts","../src/plugins/react/react-slot-plugin.ts","../src/plugins/misc/bundler/bundler-config-data-plugin.ts","../src/utils/url.ts","../src/utils/dependency-management.ts","../src/plugins/misc/bundler/respack-config-plugin.ts","../src/plugins/misc/bundler/vite-config-plugin.ts","../src/plugins/vue/vue3/vue3-application-assembler-plugin.ts","../src/plugins/vue/common/vue-router-plugin.ts","../src/plugins/vue/vue3/vue3-codegen-plugin.ts","../src/plugins/vue/vue3/vue3-entry-builder-plugin.ts","../src/plugins/vue/vue3/vue3-libraries-builder-plugin.ts","../src/plugins/vue/vue3/vue3-meta-data-builder-plugin.ts","../src/plugins/vue/vue3/vue3-components-index-builder-plugin.ts","../src/plugins/vue/vue3/vue3-client-lazyload-template-builder-plugin .ts","../src/plugins/vue/vue3/vue3-platform-builder-plugin.ts","../src/plugins/vue/vue3/vue3-entry-css-plugin.ts","../src/translate-nasl-to-app.ts","../src/utils/fetchFile.ts","../src/plugins/misc/program-analysis/analyzer-manager-plugin.ts","../src/plugins/misc/program-analysis/analysis/async-analysis.ts","../src/plugins/misc/name-mangler/name-mangler-manager-plugin.ts","../src/plugins/misc/name-mangler/name-mangler.ts","../src/utils/sanity-check.ts"],"sourcesContent":["'use strict'\n\nexports.fromCallback = function (fn) {\n return Object.defineProperty(function (...args) {\n if (typeof args[args.length - 1] === 'function') fn.apply(this, args)\n else {\n return new Promise((resolve, reject) => {\n args.push((err, res) => (err != null) ? reject(err) : resolve(res))\n fn.apply(this, args)\n })\n }\n }, 'name', { value: fn.name })\n}\n\nexports.fromPromise = function (fn) {\n return Object.defineProperty(function (...args) {\n const cb = args[args.length - 1]\n if (typeof cb !== 'function') return fn.apply(this, args)\n else {\n args.pop()\n fn.apply(this, args).then(r => cb(null, r), cb)\n }\n }, 'name', { value: fn.name })\n}\n","var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n","var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n","'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n","var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n","'use strict'\n// This is adapted from https://github.com/normalize/mz\n// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors\nconst u = require('universalify').fromCallback\nconst fs = require('graceful-fs')\n\nconst api = [\n 'access',\n 'appendFile',\n 'chmod',\n 'chown',\n 'close',\n 'copyFile',\n 'fchmod',\n 'fchown',\n 'fdatasync',\n 'fstat',\n 'fsync',\n 'ftruncate',\n 'futimes',\n 'lchmod',\n 'lchown',\n 'link',\n 'lstat',\n 'mkdir',\n 'mkdtemp',\n 'open',\n 'opendir',\n 'readdir',\n 'readFile',\n 'readlink',\n 'realpath',\n 'rename',\n 'rm',\n 'rmdir',\n 'stat',\n 'symlink',\n 'truncate',\n 'unlink',\n 'utimes',\n 'writeFile'\n].filter(key => {\n // Some commands are not available on some systems. Ex:\n // fs.cp was added in Node.js v16.7.0\n // fs.lchown is not available on at least some Linux\n return typeof fs[key] === 'function'\n})\n\n// Export cloned fs:\nObject.assign(exports, fs)\n\n// Universalify async methods:\napi.forEach(method => {\n exports[method] = u(fs[method])\n})\n\n// We differ from mz/fs in that we still ship the old, broken, fs.exists()\n// since we are a drop-in replacement for the native module\nexports.exists = function (filename, callback) {\n if (typeof callback === 'function') {\n return fs.exists(filename, callback)\n }\n return new Promise(resolve => {\n return fs.exists(filename, resolve)\n })\n}\n\n// fs.read(), fs.write(), fs.readv(), & fs.writev() need special treatment due to multiple callback args\n\nexports.read = function (fd, buffer, offset, length, position, callback) {\n if (typeof callback === 'function') {\n return fs.read(fd, buffer, offset, length, position, callback)\n }\n return new Promise((resolve, reject) => {\n fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {\n if (err) return reject(err)\n resolve({ bytesRead, buffer })\n })\n })\n}\n\n// Function signature can be\n// fs.write(fd, buffer[, offset[, length[, position]]], callback)\n// OR\n// fs.write(fd, string[, position[, encoding]], callback)\n// We need to handle both cases, so we use ...args\nexports.write = function (fd, buffer, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.write(fd, buffer, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffer })\n })\n })\n}\n\n// Function signature is\n// s.readv(fd, buffers[, position], callback)\n// We need to handle the optional arg, so we use ...args\nexports.readv = function (fd, buffers, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.readv(fd, buffers, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.readv(fd, buffers, ...args, (err, bytesRead, buffers) => {\n if (err) return reject(err)\n resolve({ bytesRead, buffers })\n })\n })\n}\n\n// Function signature is\n// s.writev(fd, buffers[, position], callback)\n// We need to handle the optional arg, so we use ...args\nexports.writev = function (fd, buffers, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.writev(fd, buffers, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.writev(fd, buffers, ...args, (err, bytesWritten, buffers) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffers })\n })\n })\n}\n\n// fs.realpath.native sometimes not available if fs is monkey-patched\nif (typeof fs.realpath.native === 'function') {\n exports.realpath.native = u(fs.realpath.native)\n} else {\n process.emitWarning(\n 'fs.realpath.native is not a function. Is fs being monkey-patched?',\n 'Warning', 'fs-extra-WARN0003'\n )\n}\n","// Adapted from https://github.com/sindresorhus/make-dir\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict'\nconst path = require('path')\n\n// https://github.com/nodejs/node/issues/8987\n// https://github.com/libuv/libuv/pull/1088\nmodule.exports.checkPath = function checkPath (pth) {\n if (process.platform === 'win32') {\n const pathHasInvalidWinCharacters = /[<>:\"|?*]/.test(pth.replace(path.parse(pth).root, ''))\n\n if (pathHasInvalidWinCharacters) {\n const error = new Error(`Path contains invalid characters: ${pth}`)\n error.code = 'EINVAL'\n throw error\n }\n }\n}\n","'use strict'\nconst fs = require('../fs')\nconst { checkPath } = require('./utils')\n\nconst getMode = options => {\n const defaults = { mode: 0o777 }\n if (typeof options === 'number') return options\n return ({ ...defaults, ...options }).mode\n}\n\nmodule.exports.makeDir = async (dir, options) => {\n checkPath(dir)\n\n return fs.mkdir(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n\nmodule.exports.makeDirSync = (dir, options) => {\n checkPath(dir)\n\n return fs.mkdirSync(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n","'use strict'\nconst u = require('universalify').fromPromise\nconst { makeDir: _makeDir, makeDirSync } = require('./make-dir')\nconst makeDir = u(_makeDir)\n\nmodule.exports = {\n mkdirs: makeDir,\n mkdirsSync: makeDirSync,\n // alias\n mkdirp: makeDir,\n mkdirpSync: makeDirSync,\n ensureDir: makeDir,\n ensureDirSync: makeDirSync\n}\n","'use strict'\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\n\nfunction pathExists (path) {\n return fs.access(path).then(() => true).catch(() => false)\n}\n\nmodule.exports = {\n pathExists: u(pathExists),\n pathExistsSync: fs.existsSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst u = require('universalify').fromPromise\n\nasync function utimesMillis (path, atime, mtime) {\n // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)\n const fd = await fs.open(path, 'r+')\n\n let closeErr = null\n\n try {\n await fs.futimes(fd, atime, mtime)\n } finally {\n try {\n await fs.close(fd)\n } catch (e) {\n closeErr = e\n }\n }\n\n if (closeErr) {\n throw closeErr\n }\n}\n\nfunction utimesMillisSync (path, atime, mtime) {\n const fd = fs.openSync(path, 'r+')\n fs.futimesSync(fd, atime, mtime)\n return fs.closeSync(fd)\n}\n\nmodule.exports = {\n utimesMillis: u(utimesMillis),\n utimesMillisSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst u = require('universalify').fromPromise\n\nfunction getStats (src, dest, opts) {\n const statFunc = opts.dereference\n ? (file) => fs.stat(file, { bigint: true })\n : (file) => fs.lstat(file, { bigint: true })\n return Promise.all([\n statFunc(src),\n statFunc(dest).catch(err => {\n if (err.code === 'ENOENT') return null\n throw err\n })\n ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))\n}\n\nfunction getStatsSync (src, dest, opts) {\n let destStat\n const statFunc = opts.dereference\n ? (file) => fs.statSync(file, { bigint: true })\n : (file) => fs.lstatSync(file, { bigint: true })\n const srcStat = statFunc(src)\n try {\n destStat = statFunc(dest)\n } catch (err) {\n if (err.code === 'ENOENT') return { srcStat, destStat: null }\n throw err\n }\n return { srcStat, destStat }\n}\n\nasync function checkPaths (src, dest, funcName, opts) {\n const { srcStat, destStat } = await getStats(src, dest, opts)\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return { srcStat, destStat, isChangingCase: true }\n }\n throw new Error('Source and destination must not be the same.')\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n\n return { srcStat, destStat }\n}\n\nfunction checkPathsSync (src, dest, funcName, opts) {\n const { srcStat, destStat } = getStatsSync(src, dest, opts)\n\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return { srcStat, destStat, isChangingCase: true }\n }\n throw new Error('Source and destination must not be the same.')\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return { srcStat, destStat }\n}\n\n// recursively check if dest parent is a subdirectory of src.\n// It works for all file types including symlinks since it\n// checks the src and dest inodes. It starts from the deepest\n// parent and stops once it reaches the src parent or the root path.\nasync function checkParentPaths (src, srcStat, dest, funcName) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return\n\n let destStat\n try {\n destStat = await fs.stat(destParent, { bigint: true })\n } catch (err) {\n if (err.code === 'ENOENT') return\n throw err\n }\n\n if (areIdentical(srcStat, destStat)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n\n return checkParentPaths(src, srcStat, destParent, funcName)\n}\n\nfunction checkParentPathsSync (src, srcStat, dest, funcName) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return\n let destStat\n try {\n destStat = fs.statSync(destParent, { bigint: true })\n } catch (err) {\n if (err.code === 'ENOENT') return\n throw err\n }\n if (areIdentical(srcStat, destStat)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return checkParentPathsSync(src, srcStat, destParent, funcName)\n}\n\nfunction areIdentical (srcStat, destStat) {\n return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev\n}\n\n// return true if dest is a subdir of src, otherwise false.\n// It only checks the path strings.\nfunction isSrcSubdir (src, dest) {\n const srcArr = path.resolve(src).split(path.sep).filter(i => i)\n const destArr = path.resolve(dest).split(path.sep).filter(i => i)\n return srcArr.every((cur, i) => destArr[i] === cur)\n}\n\nfunction errMsg (src, dest, funcName) {\n return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`\n}\n\nmodule.exports = {\n // checkPaths\n checkPaths: u(checkPaths),\n checkPathsSync,\n // checkParent\n checkParentPaths: u(checkParentPaths),\n checkParentPathsSync,\n // Misc\n isSrcSubdir,\n areIdentical\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst { mkdirs } = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst { utimesMillis } = require('../util/utimes')\nconst stat = require('../util/stat')\n\nasync function copy (src, dest, opts = {}) {\n if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n process.emitWarning(\n 'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n 'Warning', 'fs-extra-WARN0001'\n )\n }\n\n const { srcStat, destStat } = await stat.checkPaths(src, dest, 'copy', opts)\n\n await stat.checkParentPaths(src, srcStat, dest, 'copy')\n\n const include = await runFilter(src, dest, opts)\n\n if (!include) return\n\n // check if the parent of dest exists, and create it if it doesn't exist\n const destParent = path.dirname(dest)\n const dirExists = await pathExists(destParent)\n if (!dirExists) {\n await mkdirs(destParent)\n }\n\n await getStatsAndPerformCopy(destStat, src, dest, opts)\n}\n\nasync function runFilter (src, dest, opts) {\n if (!opts.filter) return true\n return opts.filter(src, dest)\n}\n\nasync function getStatsAndPerformCopy (destStat, src, dest, opts) {\n const statFn = opts.dereference ? fs.stat : fs.lstat\n const srcStat = await statFn(src)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)\n\n if (\n srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()\n ) return onFile(srcStat, destStat, src, dest, opts)\n\n if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)\n if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)\n if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)\n throw new Error(`Unknown file: ${src}`)\n}\n\nasync function onFile (srcStat, destStat, src, dest, opts) {\n if (!destStat) return copyFile(srcStat, src, dest, opts)\n\n if (opts.overwrite) {\n await fs.unlink(dest)\n return copyFile(srcStat, src, dest, opts)\n }\n if (opts.errorOnExist) {\n throw new Error(`'${dest}' already exists`)\n }\n}\n\nasync function copyFile (srcStat, src, dest, opts) {\n await fs.copyFile(src, dest)\n if (opts.preserveTimestamps) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcStat.mode)) {\n await makeFileWritable(dest, srcStat.mode)\n }\n\n // Set timestamps and mode correspondingly\n\n // Note that The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n const updatedSrcStat = await fs.stat(src)\n await utimesMillis(dest, updatedSrcStat.atime, updatedSrcStat.mtime)\n }\n\n return fs.chmod(dest, srcStat.mode)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode) {\n return fs.chmod(dest, srcMode | 0o200)\n}\n\nasync function onDir (srcStat, destStat, src, dest, opts) {\n // the dest directory might not exist, create it\n if (!destStat) {\n await fs.mkdir(dest)\n }\n\n const items = await fs.readdir(src)\n\n // loop through the files in the current directory to copy everything\n await Promise.all(items.map(async item => {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n\n // skip the item if it is matches by the filter function\n const include = await runFilter(srcItem, destItem, opts)\n if (!include) return\n\n const { destStat } = await stat.checkPaths(srcItem, destItem, 'copy', opts)\n\n // If the item is a copyable file, `getStatsAndPerformCopy` will copy it\n // If the item is a directory, `getStatsAndPerformCopy` will call `onDir` recursively\n return getStatsAndPerformCopy(destStat, srcItem, destItem, opts)\n }))\n\n if (!destStat) {\n await fs.chmod(dest, srcStat.mode)\n }\n}\n\nasync function onLink (destStat, src, dest, opts) {\n let resolvedSrc = await fs.readlink(src)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n if (!destStat) {\n return fs.symlink(resolvedSrc, dest)\n }\n\n let resolvedDest = null\n try {\n resolvedDest = await fs.readlink(dest)\n } catch (e) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (e.code === 'EINVAL' || e.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest)\n throw e\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)\n }\n\n // do not copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)\n }\n\n // copy the link\n await fs.unlink(dest)\n return fs.symlink(resolvedSrc, dest)\n}\n\nmodule.exports = copy\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdirsSync = require('../mkdirs').mkdirsSync\nconst utimesMillisSync = require('../util/utimes').utimesMillisSync\nconst stat = require('../util/stat')\n\nfunction copySync (src, dest, opts) {\n if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n opts = opts || {}\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n process.emitWarning(\n 'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n 'Warning', 'fs-extra-WARN0002'\n )\n }\n\n const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'copy')\n if (opts.filter && !opts.filter(src, dest)) return\n const destParent = path.dirname(dest)\n if (!fs.existsSync(destParent)) mkdirsSync(destParent)\n return getStats(destStat, src, dest, opts)\n}\n\nfunction getStats (destStat, src, dest, opts) {\n const statSync = opts.dereference ? fs.statSync : fs.lstatSync\n const srcStat = statSync(src)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)\n else if (srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)\n else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)\n else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)\n else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)\n throw new Error(`Unknown file: ${src}`)\n}\n\nfunction onFile (srcStat, destStat, src, dest, opts) {\n if (!destStat) return copyFile(srcStat, src, dest, opts)\n return mayCopyFile(srcStat, src, dest, opts)\n}\n\nfunction mayCopyFile (srcStat, src, dest, opts) {\n if (opts.overwrite) {\n fs.unlinkSync(dest)\n return copyFile(srcStat, src, dest, opts)\n } else if (opts.errorOnExist) {\n throw new Error(`'${dest}' already exists`)\n }\n}\n\nfunction copyFile (srcStat, src, dest, opts) {\n fs.copyFileSync(src, dest)\n if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)\n return setDestMode(dest, srcStat.mode)\n}\n\nfunction handleTimestamps (srcMode, src, dest) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)\n return setDestTimestamps(src, dest)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode) {\n return setDestMode(dest, srcMode | 0o200)\n}\n\nfunction setDestMode (dest, srcMode) {\n return fs.chmodSync(dest, srcMode)\n}\n\nfunction setDestTimestamps (src, dest) {\n // The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n const updatedSrcStat = fs.statSync(src)\n return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)\n}\n\nfunction onDir (srcStat, destStat, src, dest, opts) {\n if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)\n return copyDir(src, dest, opts)\n}\n\nfunction mkDirAndCopy (srcMode, src, dest, opts) {\n fs.mkdirSync(dest)\n copyDir(src, dest, opts)\n return setDestMode(dest, srcMode)\n}\n\nfunction copyDir (src, dest, opts) {\n fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))\n}\n\nfunction copyDirItem (item, src, dest, opts) {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n if (opts.filter && !opts.filter(srcItem, destItem)) return\n const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)\n return getStats(destStat, srcItem, destItem, opts)\n}\n\nfunction onLink (destStat, src, dest, opts) {\n let resolvedSrc = fs.readlinkSync(src)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n\n if (!destStat) {\n return fs.symlinkSync(resolvedSrc, dest)\n } else {\n let resolvedDest\n try {\n resolvedDest = fs.readlinkSync(dest)\n } catch (err) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)\n throw err\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)\n }\n\n // prevent copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)\n }\n return copyLink(resolvedSrc, dest)\n }\n}\n\nfunction copyLink (resolvedSrc, dest) {\n fs.unlinkSync(dest)\n return fs.symlinkSync(resolvedSrc, dest)\n}\n\nmodule.exports = copySync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nmodule.exports = {\n copy: u(require('./copy')),\n copySync: require('./copy-sync')\n}\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst u = require('universalify').fromCallback\n\nfunction remove (path, callback) {\n fs.rm(path, { recursive: true, force: true }, callback)\n}\n\nfunction removeSync (path) {\n fs.rmSync(path, { recursive: true, force: true })\n}\n\nmodule.exports = {\n remove: u(remove),\n removeSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst remove = require('../remove')\n\nconst emptyDir = u(async function emptyDir (dir) {\n let items\n try {\n items = await fs.readdir(dir)\n } catch {\n return mkdir.mkdirs(dir)\n }\n\n return Promise.all(items.map(item => remove.remove(path.join(dir, item))))\n})\n\nfunction emptyDirSync (dir) {\n let items\n try {\n items = fs.readdirSync(dir)\n } catch {\n return mkdir.mkdirsSync(dir)\n }\n\n items.forEach(item => {\n item = path.join(dir, item)\n remove.removeSync(item)\n })\n}\n\nmodule.exports = {\n emptyDirSync,\n emptydirSync: emptyDirSync,\n emptyDir,\n emptydir: emptyDir\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\nconst mkdir = require('../mkdirs')\n\nasync function createFile (file) {\n let stats\n try {\n stats = await fs.stat(file)\n } catch { }\n if (stats && stats.isFile()) return\n\n const dir = path.dirname(file)\n\n let dirStats = null\n try {\n dirStats = await fs.stat(dir)\n } catch (err) {\n // if the directory doesn't exist, make it\n if (err.code === 'ENOENT') {\n await mkdir.mkdirs(dir)\n await fs.writeFile(file, '')\n return\n } else {\n throw err\n }\n }\n\n if (dirStats.isDirectory()) {\n await fs.writeFile(file, '')\n } else {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n await fs.readdir(dir)\n }\n}\n\nfunction createFileSync (file) {\n let stats\n try {\n stats = fs.statSync(file)\n } catch { }\n if (stats && stats.isFile()) return\n\n const dir = path.dirname(file)\n try {\n if (!fs.statSync(dir).isDirectory()) {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n fs.readdirSync(dir)\n }\n } catch (err) {\n // If the stat call above failed because the directory doesn't exist, create it\n if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)\n else throw err\n }\n\n fs.writeFileSync(file, '')\n}\n\nmodule.exports = {\n createFile: u(createFile),\n createFileSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\nconst mkdir = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst { areIdentical } = require('../util/stat')\n\nasync function createLink (srcpath, dstpath) {\n let dstStat\n try {\n dstStat = await fs.lstat(dstpath)\n } catch {\n // ignore error\n }\n\n let srcStat\n try {\n srcStat = await fs.lstat(srcpath)\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n throw err\n }\n\n if (dstStat && areIdentical(srcStat, dstStat)) return\n\n const dir = path.dirname(dstpath)\n\n const dirExists = await pathExists(dir)\n\n if (!dirExists) {\n await mkdir.mkdirs(dir)\n }\n\n await fs.link(srcpath, dstpath)\n}\n\nfunction createLinkSync (srcpath, dstpath) {\n let dstStat\n try {\n dstStat = fs.lstatSync(dstpath)\n } catch {}\n\n try {\n const srcStat = fs.lstatSync(srcpath)\n if (dstStat && areIdentical(srcStat, dstStat)) return\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n throw err\n }\n\n const dir = path.dirname(dstpath)\n const dirExists = fs.existsSync(dir)\n if (dirExists) return fs.linkSync(srcpath, dstpath)\n mkdir.mkdirsSync(dir)\n\n return fs.linkSync(srcpath, dstpath)\n}\n\nmodule.exports = {\n createLink: u(createLink),\n createLinkSync\n}\n","'use strict'\n\nconst path = require('path')\nconst fs = require('../fs')\nconst { pathExists } = require('../path-exists')\n\nconst u = require('universalify').fromPromise\n\n/**\n * Function that returns two types of paths, one relative to symlink, and one\n * relative to the current working directory. Checks if path is absolute or\n * relative. If the path is relative, this function checks if the path is\n * relative to symlink or relative to current working directory. This is an\n * initiative to find a smarter `srcpath` to supply when building symlinks.\n * This allows you to determine which path to use out of one of three possible\n * types of source paths. The first is an absolute path. This is detected by\n * `path.isAbsolute()`. When an absolute path is provided, it is checked to\n * see if it exists. If it does it's used, if not an error is returned\n * (callback)/ thrown (sync). The other two options for `srcpath` are a\n * relative url. By default Node's `fs.symlink` works by creating a symlink\n * using `dstpath` and expects the `srcpath` to be relative to the newly\n * created symlink. If you provide a `srcpath` that does not exist on the file\n * system it results in a broken symlink. To minimize this, the function\n * checks to see if the 'relative to symlink' source file exists, and if it\n * does it will use it. If it does not, it checks if there's a file that\n * exists that is relative to the current working directory, if does its used.\n * This preserves the expectations of the original fs.symlink spec and adds\n * the ability to pass in `relative to current working direcotry` paths.\n */\n\nasync function symlinkPaths (srcpath, dstpath) {\n if (path.isAbsolute(srcpath)) {\n try {\n await fs.lstat(srcpath)\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n throw err\n }\n\n return {\n toCwd: srcpath,\n toDst: srcpath\n }\n }\n\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n\n const exists = await pathExists(relativeToDst)\n if (exists) {\n return {\n toCwd: relativeToDst,\n toDst: srcpath\n }\n }\n\n try {\n await fs.lstat(srcpath)\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n throw err\n }\n\n return {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n }\n}\n\nfunction symlinkPathsSync (srcpath, dstpath) {\n if (path.isAbsolute(srcpath)) {\n const exists = fs.existsSync(srcpath)\n if (!exists) throw new Error('absolute srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: srcpath\n }\n }\n\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n const exists = fs.existsSync(relativeToDst)\n if (exists) {\n return {\n toCwd: relativeToDst,\n toDst: srcpath\n }\n }\n\n const srcExists = fs.existsSync(srcpath)\n if (!srcExists) throw new Error('relative srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n }\n}\n\nmodule.exports = {\n symlinkPaths: u(symlinkPaths),\n symlinkPathsSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst u = require('universalify').fromPromise\n\nasync function symlinkType (srcpath, type) {\n if (type) return type\n\n let stats\n try {\n stats = await fs.lstat(srcpath)\n } catch {\n return 'file'\n }\n\n return (stats && stats.isDirectory()) ? 'dir' : 'file'\n}\n\nfunction symlinkTypeSync (srcpath, type) {\n if (type) return type\n\n let stats\n try {\n stats = fs.lstatSync(srcpath)\n } catch {\n return 'file'\n }\n return (stats && stats.isDirectory()) ? 'dir' : 'file'\n}\n\nmodule.exports = {\n symlinkType: u(symlinkType),\n symlinkTypeSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\n\nconst { mkdirs, mkdirsSync } = require('../mkdirs')\n\nconst { symlinkPaths, symlinkPathsSync } = require('./symlink-paths')\nconst { symlinkType, symlinkTypeSync } = require('./symlink-type')\n\nconst { pathExists } = require('../path-exists')\n\nconst { areIdentical } = require('../util/stat')\n\nasync function createSymlink (srcpath, dstpath, type) {\n let stats\n try {\n stats = await fs.lstat(dstpath)\n } catch { }\n\n if (stats && stats.isSymbolicLink()) {\n const [srcStat, dstStat] = await Promise.all([\n fs.stat(srcpath),\n fs.stat(dstpath)\n ])\n\n if (areIdentical(srcStat, dstStat)) return\n }\n\n const relative = await symlinkPaths(srcpath, dstpath)\n srcpath = relative.toDst\n const toType = await symlinkType(relative.toCwd, type)\n const dir = path.dirname(dstpath)\n\n if (!(await pathExists(dir))) {\n await mkdirs(dir)\n }\n\n return fs.symlink(srcpath, dstpath, toType)\n}\n\nfunction createSymlinkSync (srcpath, dstpath, type) {\n let stats\n try {\n stats = fs.lstatSync(dstpath)\n } catch { }\n if (stats && stats.isSymbolicLink()) {\n const srcStat = fs.statSync(srcpath)\n const dstStat = fs.statSync(dstpath)\n if (areIdentical(srcStat, dstStat)) return\n }\n\n const relative = symlinkPathsSync(srcpath, dstpath)\n srcpath = relative.toDst\n type = symlinkTypeSync(relative.toCwd, type)\n const dir = path.dirname(dstpath)\n const exists = fs.existsSync(dir)\n if (exists) return fs.symlinkSync(srcpath, dstpath, type)\n mkdirsSync(dir)\n return fs.symlinkSync(srcpath, dstpath, type)\n}\n\nmodule.exports = {\n createSymlink: u(createSymlink),\n createSymlinkSync\n}\n","'use strict'\n\nconst { createFile, createFileSync } = require('./file')\nconst { createLink, createLinkSync } = require('./link')\nconst { createSymlink, createSymlinkSync } = require('./symlink')\n\nmodule.exports = {\n // file\n createFile,\n createFileSync,\n ensureFile: createFile,\n ensureFileSync: createFileSync,\n // link\n createLink,\n createLinkSync,\n ensureLink: createLink,\n ensureLinkSync: createLinkSync,\n // symlink\n createSymlink,\n createSymlinkSync,\n ensureSymlink: createSymlink,\n ensureSymlinkSync: createSymlinkSync\n}\n","function stringify (obj, { EOL = '\\n', finalEOL = true, replacer = null, spaces } = {}) {\n const EOF = finalEOL ? EOL : ''\n const str = JSON.stringify(obj, replacer, spaces)\n\n return str.replace(/\\n/g, EOL) + EOF\n}\n\nfunction stripBom (content) {\n // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified\n if (Buffer.isBuffer(content)) content = content.toString('utf8')\n return content.replace(/^\\uFEFF/, '')\n}\n\nmodule.exports = { stringify, stripBom }\n","let _fs\ntry {\n _fs = require('graceful-fs')\n} catch (_) {\n _fs = require('fs')\n}\nconst universalify = require('universalify')\nconst { stringify, stripBom } = require('./utils')\n\nasync function _readFile (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n let data = await universalify.fromCallback(fs.readFile)(file, options)\n\n data = stripBom(data)\n\n let obj\n try {\n obj = JSON.parse(data, options ? options.reviver : null)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n\n return obj\n}\n\nconst readFile = universalify.fromPromise(_readFile)\n\nfunction readFileSync (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n try {\n let content = fs.readFileSync(file, options)\n content = stripBom(content)\n return JSON.parse(content, options.reviver)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n}\n\nasync function _writeFile (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n\n await universalify.fromCallback(fs.writeFile)(file, str, options)\n}\n\nconst writeFile = universalify.fromPromise(_writeFile)\n\nfunction writeFileSync (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n // not sure if fs.writeFileSync returns anything, but just in case\n return fs.writeFileSync(file, str, options)\n}\n\nconst jsonfile = {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync\n}\n\nmodule.exports = jsonfile\n","'use strict'\n\nconst jsonFile = require('jsonfile')\n\nmodule.exports = {\n // jsonfile exports\n readJson: jsonFile.readFile,\n readJsonSync: jsonFile.readFileSync,\n writeJson: jsonFile.writeFile,\n writeJsonSync: jsonFile.writeFileSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst pathExists = require('../path-exists').pathExists\n\nasync function outputFile (file, data, encoding = 'utf-8') {\n const dir = path.dirname(file)\n\n if (!(await pathExists(dir))) {\n await mkdir.mkdirs(dir)\n }\n\n return fs.writeFile(file, data, encoding)\n}\n\nfunction outputFileSync (file, ...args) {\n const dir = path.dirname(file)\n if (!fs.existsSync(dir)) {\n mkdir.mkdirsSync(dir)\n }\n\n fs.writeFileSync(file, ...args)\n}\n\nmodule.exports = {\n outputFile: u(outputFile),\n outputFileSync\n}\n","'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFile } = require('../output-file')\n\nasync function outputJson (file, data, options = {}) {\n const str = stringify(data, options)\n\n await outputFile(file, str, options)\n}\n\nmodule.exports = outputJson\n","'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFileSync } = require('../output-file')\n\nfunction outputJsonSync (file, data, options) {\n const str = stringify(data, options)\n\n outputFileSync(file, str, options)\n}\n\nmodule.exports = outputJsonSync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst jsonFile = require('./jsonfile')\n\njsonFile.outputJson = u(require('./output-json'))\njsonFile.outputJsonSync = require('./output-json-sync')\n// aliases\njsonFile.outputJSON = jsonFile.outputJson\njsonFile.outputJSONSync = jsonFile.outputJsonSync\njsonFile.writeJSON = jsonFile.writeJson\njsonFile.writeJSONSync = jsonFile.writeJsonSync\njsonFile.readJSON = jsonFile.readJson\njsonFile.readJSONSync = jsonFile.readJsonSync\n\nmodule.exports = jsonFile\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst { copy } = require('../copy')\nconst { remove } = require('../remove')\nconst { mkdirp } = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst stat = require('../util/stat')\n\nasync function move (src, dest, opts = {}) {\n const overwrite = opts.overwrite || opts.clobber || false\n\n const { srcStat, isChangingCase = false } = await stat.checkPaths(src, dest, 'move', opts)\n\n await stat.checkParentPaths(src, srcStat, dest, 'move')\n\n // If the parent of dest is not root, make sure it exists before proceeding\n const destParent = path.dirname(dest)\n const parsedParentPath = path.parse(destParent)\n if (parsedParentPath.root !== destParent) {\n await mkdirp(destParent)\n }\n\n return doRename(src, dest, overwrite, isChangingCase)\n}\n\nasync function doRename (src, dest, overwrite, isChangingCase) {\n if (!isChangingCase) {\n if (overwrite) {\n await remove(dest)\n } else if (await pathExists(dest)) {\n throw new Error('dest already exists.')\n }\n }\n\n try {\n // Try w/ rename first, and try copy + remove if EXDEV\n await fs.rename(src, dest)\n } catch (err) {\n if (err.code !== 'EXDEV') {\n throw err\n }\n await moveAcrossDevice(src, dest, overwrite)\n }\n}\n\nasync function moveAcrossDevice (src, dest, overwrite) {\n const opts = {\n overwrite,\n errorOnExist: true,\n preserveTimestamps: true\n }\n\n await copy(src, dest, opts)\n return remove(src)\n}\n\nmodule.exports = move\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst copySync = require('../copy').copySync\nconst removeSync = require('../remove').removeSync\nconst mkdirpSync = require('../mkdirs').mkdirpSync\nconst stat = require('../util/stat')\n\nfunction moveSync (src, dest, opts) {\n opts = opts || {}\n const overwrite = opts.overwrite || opts.clobber || false\n\n const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'move')\n if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))\n return doRename(src, dest, overwrite, isChangingCase)\n}\n\nfunction isParentRoot (dest) {\n const parent = path.dirname(dest)\n const parsedPath = path.parse(parent)\n return parsedPath.root === parent\n}\n\nfunction doRename (src, dest, overwrite, isChangingCase) {\n if (isChangingCase) return rename(src, dest, overwrite)\n if (overwrite) {\n removeSync(dest)\n return rename(src, dest, overwrite)\n }\n if (fs.existsSync(dest)) throw new Error('dest already exists.')\n return rename(src, dest, overwrite)\n}\n\nfunction rename (src, dest, overwrite) {\n try {\n fs.renameSync(src, dest)\n } catch (err) {\n if (err.code !== 'EXDEV') throw err\n return moveAcrossDevice(src, dest, overwrite)\n }\n}\n\nfunction moveAcrossDevice (src, dest, overwrite) {\n const opts = {\n overwrite,\n errorOnExist: true,\n preserveTimestamps: true\n }\n copySync(src, dest, opts)\n return removeSync(src)\n}\n\nmodule.exports = moveSync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nmodule.exports = {\n move: u(require('./move')),\n moveSync: require('./move-sync')\n}\n","'use strict'\n\nmodule.exports = {\n // Export promiseified graceful-fs:\n ...require('./fs'),\n // Export extra methods:\n ...require('./copy'),\n ...require('./empty'),\n ...require('./ensure'),\n ...require('./json'),\n ...require('./mkdirs'),\n ...require('./move'),\n ...require('./output-file'),\n ...require('./path-exists'),\n ...require('./remove')\n}\n","import { Container } from 'inversify';\nimport { readFileSync } from 'node:fs';\nimport * as path from 'node:path';\nimport { outputFileSync } from 'fs-extra';\nimport { Logger } from '../src';\nimport { compileAsProject } from '../src/compile';\nimport { sanityCheck } from '../src/utils/sanity-check';\nimport { deserializeAppWhileKeepTypeAnnotation } from '../src/utils/serialization';\n\nconst config = {\n debug: false,\n nuimsDomain: 'user.lcap.codewave-test.163yun.com',\n kubeInsightAppCluster: 'drill',\n officialTenantId: '00000000000000000000000000000000',\n enableOpenAiCompletionForLogic: true,\n pwdSecurity: {\n pwdCategory: 'normal',\n },\n tenantAndAppMaxLength: 32,\n platformCreateDatabaseOpen: false,\n documentCenter: {\n isLocalDeployment: false,\n deliveryMode: 'online',\n url: 'https://community.codewave.163.com/CommunityParent',\n },\n lcpRedirectSwitch: true,\n kubeInsightAddress: '',\n gatewayType: 'light',\n STATIC_URL: '//minio-api.codewave-test.163yun.com/lowcode-static',\n traceSwitch: false,\n resourceAssignStrategy: 'app',\n creatorIsManager: false,\n websqlSwitch: 'dev,online',\n enableCodeWaveMarket: false,\n platformEnv: 'dev',\n IDE_STATIC_URL: '//minio-api.codewave-test.163yun.com/lowcode-static',\n isPrivatized: 'true',\n clientToken: 'ODDINZU1OWYTZWM5NY0ZZJEYLTK3NGQTNWNJNJQYYMM0OGM1',\n biConfig: false,\n platformExtraAbilityDetail: null,\n USER_STATIC_URL: '//minio-api.codewave-test.163yun.com/lowcode-static',\n kubeInsightServiceName: 'codewave#lcap-fe',\n consoleDomain: '',\n enableOpenAiForLogic: true,\n lowcodeDomain: 'lcap.codewave-test.163yun.com',\n name: 'lcap',\n tenantIntegrationSwitch: false,\n envNuimsDomain: {\n dev: 'user.lcap.codewave-test.163yun.com',\n online: 'user.lcap.codewave-test.163yun.com',\n },\n envLcpDomain: {\n dev: {\n lcpDomain: 'lcap.codewave-test.163yun.com',\n },\n online: {\n lcpDomain: 'lcap.codewave-test.163yun.com',\n },\n },\n kubeClientApplicationKey: 'lcp-drill',\n tenant: 'defaulttenant',\n env: 'dev',\n tenantID: '00000000000000000000000000000000',\n multiEnvEnable: true,\n tenantType: 0,\n tenantLevel: 1,\n tenantLevelDetail: {\n onlineReplicasLimit: '3',\n aiJavaLogicCompletionDisplay: 'true',\n releaseDevAppCountLimit: '-1',\n customPackageSupport: 'true',\n aiNl2sqlSupport: 'false',\n aiNextComponentSupport: 'true',\n productAppSpecification: '1',\n configDatabaseSupport: 'true',\n aiJavaLogicDisplay: 'true',\n appPublishOnlineSupport: 'true',\n rdsMode: '0',\n assetsLibraryExportSupport: 'true',\n assignDeveloperSupport: 'true',\n cpuLimit: '4',\n configSourceCodeSupport: 'true',\n mavenConfigEditSupport: 'true',\n aiCodeAnalyzeSupport: 'false',\n aiNl2LogicSupport: 'false',\n onboardingSupport: 'false',\n storageLimit: '8',\n releaseAppCountLimit: '4',\n configFrontSupport: 'true',\n configFileStorageSupport: 'true',\n aiNl2sqlDisplay: 'true',\n teamDeveloperSupport: 'true',\n accountLimit: '-1',\n aiD2CSupport: 'false',\n exportSourceSupport: 'true',\n customDomainSupport: 'true',\n reportFormsEditSupport: 'true',\n aiNl2LogicDisplay: 'true',\n memoryLimit: '8',\n aiJavaLogicCompletionSupport: 'false',\n assetsArchetypeSupport: 'true',\n appCreateLimit: '-1',\n configImageRepoSupport: 'true',\n configSourceSupport: 'true',\n aiJavaLogicSupport: 'false',\n assetsTemplateExportSupport: 'true',\n },\n tenantExtraAbilityDetail: null,\n tenantVersion: {\n tenantName: 'defaulttenant',\n versionType: 4,\n versionId: '2417a61d7e9a4cb7b5ed2d83d29cc5fa',\n snapshotId: 'c8885750ba4f48eea67f85fc965f71f8',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n changeStatus: 0,\n changeDesc: null,\n createdTime: '2024-02-02 12:44:02',\n updatedTime: '2024-02-02 12:44:02',\n businessVersionDTO: {\n versionType: 4,\n versionId: '2417a61d7e9a4cb7b5ed2d83d29cc5fa',\n snapshotId: 'c8885750ba4f48eea67f85fc965f71f8',\n versionName: '私有化企业版',\n description: '私有化企业版',\n resourceList: null,\n createdTime: '2024-02-02 12:26:04',\n updatedTime: '2024-02-02 12:26:04',\n },\n resourceList: [\n {\n resourceItem: 'onlineReplicasLimit',\n resourceValue: '3',\n },\n {\n resourceItem: 'aiJavaLogicCompletionDisplay',\n resourceValue: 'true',\n },\n {\n resourceItem: 'releaseDevAppCountLimit',\n resourceValue: '-1',\n },\n {\n resourceItem: 'customPackageSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiNl2sqlSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'aiNextComponentSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'productAppSpecification',\n resourceValue: '1',\n },\n {\n resourceItem: 'configDatabaseSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiJavaLogicDisplay',\n resourceValue: 'true',\n },\n {\n resourceItem: 'appPublishOnlineSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'rdsMode',\n resourceValue: '0',\n },\n {\n resourceItem: 'assetsLibraryExportSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'assignDeveloperSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'cpuLimit',\n resourceValue: '4',\n },\n {\n resourceItem: 'configSourceCodeSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'mavenConfigEditSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiNl2LogicSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'aiCodeAnalyzeSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'onboardingSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'storageLimit',\n resourceValue: '8',\n },\n {\n resourceItem: 'releaseAppCountLimit',\n resourceValue: '4',\n },\n {\n resourceItem: 'configFrontSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'configFileStorageSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'accountLimit',\n resourceValue: '-1',\n },\n {\n resourceItem: 'teamDeveloperSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiNl2sqlDisplay',\n resourceValue: 'true',\n },\n {\n resourceItem: 'exportSourceSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiD2CSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'customDomainSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'reportFormsEditSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'memoryLimit',\n resourceValue: '8',\n },\n {\n resourceItem: 'aiNl2LogicDisplay',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiJavaLogicCompletionSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'appCreateLimit',\n resourceValue: '-1',\n },\n {\n resourceItem: 'assetsArchetypeSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'configSourceSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'configImageRepoSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'assetsTemplateExportSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiJavaLogicSupport',\n resourceValue: 'false',\n },\n ],\n },\n tenantResource: [\n {\n resourceItem: 'onlineReplicasLimit',\n resourceValue: '3',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'onlineReplicasLimit',\n resourceValue: '3',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiJavaLogicCompletionDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiJavaLogicCompletionDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'releaseDevAppCountLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'releaseDevAppCountLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'customPackageSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'customPackageSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiNl2sqlSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiNl2sqlSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiNextComponentSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiNextComponentSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'productAppSpecification',\n resourceValue: '1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'productAppSpecification',\n resourceValue: '1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configDatabaseSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configDatabaseSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiJavaLogicDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiJavaLogicDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'appPublishOnlineSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'appPublishOnlineSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'rdsMode',\n resourceValue: '0',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'rdsMode',\n resourceValue: '0',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'assetsLibraryExportSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'assetsLibraryExportSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'assignDeveloperSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'assignDeveloperSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'cpuLimit',\n resourceValue: '4',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'cpuLimit',\n resourceValue: '4',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configSourceCodeSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configSourceCodeSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'mavenConfigEditSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'mavenConfigEditSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiNl2LogicSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiNl2LogicSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiCodeAnalyzeSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiCodeAnalyzeSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'onboardingSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'onboardingSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'storageLimit',\n resourceValue: '8',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'storageLimit',\n resourceValue: '8',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'releaseAppCountLimit',\n resourceValue: '4',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'releaseAppCountLimit',\n resourceValue: '4',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configFrontSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configFrontSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configFileStorageSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configFileStorageSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'accountLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'accountLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'teamDeveloperSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'teamDeveloperSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiNl2sqlDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiNl2sqlDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'exportSourceSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'exportSourceSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiD2CSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiD2CSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'customDomainSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'customDomainSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'reportFormsEditSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'reportFormsEditSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'memoryLimit',\n resourceValue: '8',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'memoryLimit',\n resourceValue: '8',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiNl2LogicDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiNl2LogicDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiJavaLogicCompletionSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiJavaLogicCompletionSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'appCreateLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'appCreateLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'assetsArchetypeSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'assetsArchetypeSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configSourceSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configSourceSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configImageRepoSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configImageRepoSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'assetsTemplateExportSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'assetsTemplateExportSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiJavaLogicSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiJavaLogicSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n ],\n businessConfig: {\n upgradeClueCollect: {\n appId: '',\n support: false,\n },\n eventTracking: {\n appId: '',\n support: false,\n },\n beginnerGuide: {\n appId: '',\n support: false,\n },\n corpCertify: {\n appId: '',\n support: false,\n },\n rateLimiter: {\n appId: '',\n support: false,\n },\n businessAccess: {\n appId: '',\n support: false,\n },\n createSaaSTenant: {\n appId: '',\n support: false,\n },\n customApp: {\n appId: '',\n support: false,\n },\n research: {\n appId: '',\n support: false,\n },\n },\n expireTimeStr: null,\n layOutConfig: {},\n isPreviewFe: false,\n previewVersion: '',\n isExport: false,\n extendedConfig: null,\n appid: '7c058eff-e54c-4991-9e71-8b6357eb43b7',\n extensionConfigMap: {\n heuristicalSplit: {\n enabled: false,\n },\n },\n allNodesAPI: {},\n};\n\nconst logger = Logger('Playground');\n\nexport async function startDemoTranslation(container?: Container) {\n const app = await getApp();\n if (!app) {\n throw new Error('app 为空');\n }\n const frontend = app.frontendTypes.find((x) => x.kind === 'pc')?.frontends.at(0)!;\n if (!frontend) {\n throw new Error('frontend 为空');\n }\n // @ts-expect-error TODO wudengke config类型错误\n const project = await compileAsProject(app, frontend, config, container);\n const dict = project.getFileDict().files;\n logger.debug({ files: Object.keys(dict) }, '文件系统内容');\n const files = Object.entries(dict).map(([k, v]) => {\n return { path: k, content: v.code };\n });\n await writeCode(files);\n return files;\n async function getApp() {\n const res = await fetchApp();\n sanityCheck(res);\n return deserializeAppWhileKeepTypeAnnotation(res);\n }\n\n async function writeCode(codeList: { content: string | Buffer; path: string }[]) {\n const logger = Logger('代码写入');\n logger.info('开始写入debug用文件系统');\n for (const item of codeList) {\n logger.trace({ path: item.path }, `写入`);\n\n const outPath = path.join(__dirname, 'out', item.path); // @ts-ignore-error\n outputFileSync(outPath, Buffer.from(item.content));\n\n logger.trace({ path: item.path }, `写入完成`);\n }\n logger.info('全部写入完成');\n }\n}\n\nfunction fetchApp() {\n return useLocalFile();\n // function useLocalApi() {\n // return fetch('http://localhost:9300/api/storage/batchQuery', {\n // headers: {\n // accept: 'application/json, text/plain, */*',\n // 'accept-language': 'zh,en;q=0.9',\n // 'content-type': 'application/json;charset=UTF-8',\n // appid: '37adfe34-df3c-44b9-bf32-fafe64c213a6',\n // },\n // body: '[{\"path\":\"app\"}]',\n // method: 'POST',\n // })\n // .then((x) => x.json())\n // .then((x) => {\n // return x['result'][0];\n // });\n // }\n\n async function useLocalFile() {\n const json = readFileSync('./playground/fixtures/src.json').toString();\n return JSON.parse(json);\n }\n}\n","import { App, Frontend } from '@lcap/nasl-concepts';\nimport axios, { AxiosInstance } from 'axios';\nimport { Container } from 'inversify';\nimport { trimStart } from 'lodash';\nimport { makeDefaultContainer } from './default-container';\nimport { translateNASLToApp } from './translate-nasl-to-app';\nimport { OrganizedFile } from './plugins/misc/project-organization-plugin';\nimport { GeneratorInfrastructureDomain } from './service-interface';\nimport { ServiceMetaKind } from './service-metakind';\nimport { CommonAppConfig } from './types/config';\nimport { Logger } from './utils/logger';\nimport { getPublicPath, normalizeStaticUrl } from './utils/url';\nimport { serializeAppWithKeepTypeAnnotation } from './utils';\nimport { fetchFile } from './utils/fetchFile';\nimport { getPredefinedMaterialByTags } from './hack/material-config/predefined-dependencies-manager';\n\ntype ProjectFile = { code: string | Buffer };\n\nexport class VirtualProject {\n constructor(private fileDict: Record<string, ProjectFile>) {}\n mutateFile(path: string, content: Buffer | string, options = {}) {\n this.fileDict[path] = {\n ...options,\n code: content,\n };\n }\n getFileDict() {\n return { files: this.fileDict };\n }\n readFile(path: string) {\n return this.fileDict[path].code;\n }\n}\n\ntype FS = GeneratorInfrastructureDomain.FileSystemProvider;\n\nexport async function compileAsProject(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig,\n container?: Container\n): Promise<VirtualProject> {\n let codeGeneratorContainer = container ?? makeDefaultContainer(frontend.frameworkKind);\n const logger = Logger('compileAsProject');\n logger.info('开始翻译代码');\n\n // 制品日志功能\n // TODO wudengke 这个条件来自genBundleFiles,需要重构\n if ((!config?.isExport && config?.env === 'dev') || config?.debug) {\n logger.info('启用制品日志插件');\n // FIXME wudengke 暂时关闭制品日志功能\n // codeGeneratorContainer = installLoggingPlugin(codeGeneratorContainer);\n }\n\n logger.info('载入项目模板');\n\n const fs = codeGeneratorContainer.get<FS>(ServiceMetaKind.FileSystemProvider);\n\n const templatePackage = getPredefinedMaterialByTags([\n 'template',\n frontend.type,\n frontend.frameworkKind,\n ]);\n if (templatePackage) {\n const { STATIC_URL } = config;\n const url = `${normalizeStaticUrl(STATIC_URL)}/packages/${templatePackage?.name}@${\n templatePackage?.version\n }/sandbox-template.json`;\n try {\n const res = await fetchFile<{ files: Record<string, { code: string }> }>(url, axios, false);\n logger.info('远程加载模板成功');\n const files = res.files;\n Object.entries(files).forEach(([k, v]) => {\n fs.write(k, v.code);\n });\n } catch (error) {\n throw new Error(`远程加载模板失败`);\n }\n } else {\n throw new Error(`未找到匹配模板`);\n }\n\n await translateNASLToApp(app, frontend, config, '/', codeGeneratorContainer, fs);\n\n logger.info(Object.keys(fs.toJSON()), '生成的文件');\n\n /**\n * @deprecated\n *\n * TODO wudengke 去掉project\n */\n const project = new VirtualProject({});\n Object.entries(fs.toJSON()).forEach(([k, v]) => {\n if (v !== null) {\n project.mutateFile(k, v);\n }\n });\n return project;\n}\n\nexport async function compileNASLToReactDist(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig,\n http: AxiosInstance\n): Promise<OrganizedFile[]> {\n const logger = Logger('compileNASLToReactDist');\n // @ts-expect-error HACK: wudengke 因为export的时候没有STATIC_URL,所以这里需要手动先补上\n config = { ...config, STATIC_URL: config.STATIC_URL || globalThis?.appInfo?.STATIC_URL };\n\n const prefix = getPublicPath(app, config, frontend);\n logger.info('调用编译接口,输出静态文件');\n try {\n const files: { content: string; path: string }[] = await http\n .post('/api/v1/app/compileNaslToDist', {\n config,\n appId: app.id,\n frontendNodePath: frontend.nodePath,\n app: serializeAppWithKeepTypeAnnotation(app),\n })\n .then((x) => {\n const code = x?.data?.code;\n if (code !== 200) {\n const reason: string = x.data?.message ?? '原因未知';\n const logs: string = x.data?.errorPayload?.logs?.join('\\n') ?? '';\n logger.error('页面代码编译错误', x);\n if (logs) {\n console.error(logs);\n }\n if (reason) {\n throw new Error(`页面代码编译错误: ${reason}`);\n }\n throw new Error(`页面代码编译错误`);\n }\n return x.data.result.files;\n });\n const res = files.map((x) => {\n const path = prefix + trimStart(x.path, '/');\n return { ...x, path };\n });\n logger.info(\n '编译结果',\n res.map((x) => x.path)\n );\n return res;\n } catch (error) {\n throw error;\n }\n}\n","import { Container } from 'inversify';\nimport { Vue3PresetPlugin } from './plugins/vue/vue3/vue3-preset-plugin';\nimport { ReactPresetPlugin } from './plugins/react/react-preset-plugin';\n\nexport function makeDefaultContainer(kind: 'vue3' | 'react' | 'vue2' = 'react') {\n if (kind === 'react') {\n return ReactPresetPlugin.install(new Container());\n } else if (kind === 'vue3') {\n return Vue3PresetPlugin.install(new Container());\n } else {\n throw new Error(`未实现${kind}的默认容器`);\n }\n}\n","import '@abraham/reflection';\nimport { Container, inject, injectable } from 'inversify';\n\nimport { App, Frontend } from '@lcap/nasl-concepts';\nimport {\n type Generator,\n type GeneratorInfrastructureDomain,\n type NASLDomain,\n} from '../../../service-interface';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { CommonAppConfig } from '../../../types/config';\nimport { Logger } from '../../../utils/logger';\nimport {\n deserializeAppWhileKeepTypeAnnotation,\n serializeAppWithKeepTypeAnnotation,\n} from '../../../utils/serialization';\nimport { NASLAppIRBuilderPlugin } from '../../ir-builder-plugin';\nimport { JavaScriptCodegenPlugin } from '../../language/javascript-codegen-plugin';\nimport { EntrypointPlugin } from '../../misc/entry-point/entry-point-plugin';\nimport { FileSystemPlugin } from '../../misc/file-system/file-system-plugin';\nimport { BundlerConfigDataPlugin } from '../../misc/bundler/bundler-config-data-plugin';\nimport { ViteConfigPlugin } from '../../misc/bundler/vite-config-plugin';\nimport { FrontendBundlerConfigPlugin } from '../../misc/frontend-bundler-config-plugin';\nimport { FrontendPerformancePlugin } from '../../misc/frontend-performance-plugin';\nimport { MicroFrontendPlugin } from '../../misc/micro-frontend/micro-frontend-plugin';\nimport { NpmPackageJSONManagerPlugin } from '../../misc/npm-package-manager-plugin';\nimport { OrganizedFile, ProjectOrganizerPlugin } from '../../misc/project-organization-plugin';\nimport { Vue3ApplicationAssemblerPlugin } from './vue3-application-assembler-plugin';\nimport { Vue3CodegenPlugin } from './vue3-codegen-plugin';\nimport { Vue3EntryBuilderPlugin } from './vue3-entry-builder-plugin';\nimport { Vue3LibrariesBuilderPlugin } from './vue3-libraries-builder-plugin';\nimport { Vue3EntryCssPlugin } from './vue3-entry-css-plugin';\nimport { Vue3MetaDataBuilderPlugin } from './vue3-meta-data-builder-plugin';\nimport { Vue3ComponentsIndexBuilderPlugin } from './vue3-components-index-builder-plugin';\nimport { Vue3ClientLazyloadTemplateBuilderPlugin } from './vue3-client-lazyload-template-builder-plugin ';\nimport { Vue3PlatformBuilderPlugin } from './vue3-platform-builder-plugin';\nimport { RoutesExtractionPlugin } from '../../misc/routes-extraction-plugin';\nimport { VueRouterPlugin } from '../common/vue-router-plugin';\n\nconst logger = Logger('Vue3PresetPlugin');\n\n@injectable()\nexport class Vue3PresetPlugin implements Generator.NASLTranspiler {\n constructor(\n @inject(ServiceMetaKind.IRBuilder) private irBuilder: NASLDomain.IRBuilder,\n @inject(ServiceMetaKind.FileSystemProvider)\n private fileSystemProvider: GeneratorInfrastructureDomain.FileSystemProvider,\n @inject(NpmPackageJSONManagerPlugin)\n private npmPackageJSONManager: NpmPackageJSONManagerPlugin,\n @inject(ServiceMetaKind.ProjectOrganizer)\n private projectOrganizer: GeneratorInfrastructureDomain.ProjectOrganizer,\n @inject(Vue3ApplicationAssemblerPlugin)\n private applicationAssembler: Vue3ApplicationAssemblerPlugin\n ) {}\n\n async transpile(instruction: {\n app: App;\n frontend: Frontend;\n config: CommonAppConfig;\n baseDir: string;\n }): Promise<OrganizedFile[]> {\n const appJson = serializeAppWithKeepTypeAnnotation(instruction.app);\n try {\n const app = deserializeAppWhileKeepTypeAnnotation(appJson);\n const frontend = app.findNodeByPath(instruction.frontend.nodePath) as Frontend;\n const ir = this.irBuilder.buildIR(app, frontend, instruction.config);\n const assembledApplication = await this.applicationAssembler.assemble(ir, instruction.config);\n // TODO 覆写 moveFilesAsYouWant 方法,调用Vue3专用的方法来移动\n const finalizedFiles = await this.projectOrganizer.organize({\n baseDir: instruction.baseDir,\n project: assembledApplication,\n importIRResolver: (s) => {\n if (s.import) {\n if (s.lazy) {\n return `const ${s.import} = (() => import('${s.from}'));`;\n }\n return `import ${s.import} from '${s.from}';`;\n }\n return `import '${s.from}';`;\n },\n });\n\n for (const f of finalizedFiles) {\n this.fileSystemProvider.write(f.path, f.content);\n }\n return finalizedFiles;\n } catch (error) {\n throw error;\n }\n }\n static install(container: Container) {\n const logger = Logger('Vue3PresetPlugin');\n logger.info('安装Vue3PresetPlugin');\n let c = container.createChild();\n // main entry\n c.bind(ServiceMetaKind.NASLTranspiler).to(Vue3PresetPlugin);\n\n // basic\n c.bind(ServiceMetaKind.IRBuilder).to(NASLAppIRBuilderPlugin);\n\n // js\n c.bind(JavaScriptCodegenPlugin).toSelf();\n\n // vue3\n c = Vue3ApplicationAssemblerPlugin.install(c);\n c = Vue3CodegenPlugin.install(c);\n\n // router\n c = RoutesExtractionPlugin.install(c);\n c = VueRouterPlugin.install(c);\n\n // misc\n c.bind(ServiceMetaKind.ProjectOrganizer).to(ProjectOrganizerPlugin);\n c.bind(ServiceMetaKind.FileSystemProvider).to(FileSystemPlugin).inSingletonScope();\n\n c = BundlerConfigDataPlugin.install(c);\n c = ViteConfigPlugin.install(c);\n c = FrontendBundlerConfigPlugin.install(c);\n c = FrontendPerformancePlugin.install(c);\n c = NpmPackageJSONManagerPlugin.install(c);\n c = MicroFrontendPlugin.install(c);\n c = EntrypointPlugin.install(c);\n c = Vue3EntryBuilderPlugin.install(c);\n c = Vue3LibrariesBuilderPlugin.install(c);\n c = Vue3EntryCssPlugin.install(c);\n c = Vue3MetaDataBuilderPlugin.install(c);\n c = Vue3ComponentsIndexBuilderPlugin.install(c);\n c = Vue3ClientLazyloadTemplateBuilderPlugin.install(c);\n c = Vue3PlatformBuilderPlugin.install(c);\n return c;\n }\n}\n","const ServiceMetaKind = {\n /**\n * @deprecated\n */\n StateManager: Symbol.for('StateManager'),\n ReactStateManager: Symbol.for('ReactStateManager'),\n ReactHookProvider: Symbol.for('ReactHookProvider'),\n CodePrinter: Symbol.for('CodePrinter'),\n ReactJavaScriptCodePrinter: Symbol.for('ReactJavaScriptCodePrinter'),\n BaseNodePrinter: Symbol.for('BaseNodePrinter'),\n ProjectOrganizer: Symbol.for('ProjectOrganizer'),\n MicroFrontendManager: Symbol.for('MicroFrontendManager'),\n FrontendCodeGenerator: Symbol.for('FrontendCodeGenerator'),\n IRBuilder: Symbol.for('IRBuilder'),\n IRPostProcesser: Symbol.for('IRPostProcesser'),\n IRPreProcesser: Symbol.for('IRPreProcesser'),\n NASLTranspiler: Symbol.for('NASLTranspiler'),\n ReactCodegen: Symbol.for('ReactCodegen'),\n CodeGenerationLifecycleHooks: Symbol.for('CodeGenerationLifecycleHooks'),\n FileSystemProvider: Symbol.for('FileSystemProvider'),\n FrontendBundlerFileConfig: Symbol.for('FrontendBundlerFileConfig'),\n FrontendBundlerConfig: Symbol.for('FrontendBundlerConfig'),\n FrontendPerformance: Symbol.for('FrontendPerformance'),\n NpmPackageJSONManager: Symbol.for('NpmPackageJSONManager'),\n EntryPointManager: Symbol.for('EntryPointManager'),\n AnalyzerManager: Symbol.for('AnalyzerManager'),\n NameManglerManager: Symbol.for('NameManglerManager'),\n};\n\nconst hasAfterAllFilesGeneratedKind = [\n ServiceMetaKind.CodeGenerationLifecycleHooks,\n ServiceMetaKind.NpmPackageJSONManager,\n];\n\nexport { ServiceMetaKind, hasAfterAllFilesGeneratedKind };\n","import { isFunction } from 'lodash';\nimport pino from 'pino';\n\nconst DefaultLoggingLevel = process.env.LOG_LEVEL || 'info';\n\nconst globalLogger = pino({\n level: DefaultLoggingLevel,\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: true,\n },\n },\n});\n\nconst showCallStack = process.env.NODE_ENV === 'CALLSTACK';\n\nexport function Logger(prefix: string) {\n // let l = showCallStack ? pinoCaller(globalLogger) : globalLogger;\n let l = globalLogger;\n const logger = l.child({}, { msgPrefix: `[${prefix}] ` });\n return logger;\n}\n\nexport function logging(target: any) {\n if (!isFunction(target)) {\n throw new Error();\n return target;\n }\n const className = target.name;\n const methodNames = Object.getOwnPropertyNames(target.prototype);\n const logger = Logger(className);\n methodNames.forEach((methodName) => {\n const originalMethod = target.prototype[methodName];\n target.prototype[methodName] = function (...args: any[]) {\n logger.trace({ method: methodName, args });\n return originalMethod.apply(this, args);\n };\n });\n\n return target;\n}\n","import { App, BaseNode, TypeAnnotation } from '@lcap/nasl-concepts';\nimport { cloneDeep } from 'lodash';\n\nexport function deserializeAppWhileKeepTypeAnnotation(appJSON: object): App {\n const oldSub = BaseNode.prototype.subConstructor;\n const hack: typeof oldSub = function (source) {\n // @ts-expect-error\n oldSub.call(this, source);\n // @ts-expect-error\n if (source.typeAnnotation) {\n // @ts-expect-error\n this.typeAnnotation = new TypeAnnotation(source.typeAnnotation);\n }\n // @ts-expect-error\n if (source.__TypeArguments) {\n // @ts-expect-error\n this.__TypeArguments = source.__TypeArguments.map((x) => {\n if (x) {\n return new TypeAnnotation(x);\n }\n return x;\n });\n }\n };\n BaseNode.prototype.subConstructor = hack;\n const app = new App(appJSON);\n if ('_callLogicUuidToHeaderMap' in appJSON) {\n const m = appJSON._callLogicUuidToHeaderMap as Record<string, string>;\n app.saveCallLogicUuidToHeaderMap(m);\n }\n BaseNode.prototype.subConstructor = oldSub;\n return app;\n}\n\nexport function serializeAppWithKeepTypeAnnotation(app: App) {\n // @ts-expect-error\n const baseNodeProto = app.__proto__.__proto__;\n const oldToJSON = baseNodeProto._toJSON;\n // @ts-expect-error\n const newToJSON = function (filerFn): any {\n // @ts-expect-error\n const json = oldToJSON.call(this, filerFn);\n // @ts-expect-error\n if (this.typeAnnotation || this.__TypeAnnotation) {\n // @ts-expect-error\n json.typeAnnotation = this.typeAnnotation?.toJSON() ?? this.__TypeAnnotation?.toJSON();\n }\n // @ts-expect-error\n if (this.__TypeArguments) {\n // @ts-expect-error\n json.__TypeArguments = this.__TypeArguments.map?.((x) => {\n if (x) {\n return x.toJSON();\n }\n return x;\n });\n }\n return json;\n };\n\n baseNodeProto._toJSON = newToJSON;\n try {\n const json = app.toJSON();\n json._callLogicUuidToHeaderMap = cloneDeep(app._callLogicUuidToHeaderMap);\n return json;\n } catch (error) {\n throw error;\n } finally {\n baseNodeProto._toJSON = oldToJSON;\n }\n}\n","import '@abraham/reflection';\nimport {\n App,\n Argument,\n Assignment,\n BinaryExpression,\n BindAttribute,\n BindDirective,\n BindEvent,\n CallFunction,\n Connector,\n Frontend,\n FrontendVariable,\n Identifier,\n Logic,\n MemberExpression,\n Module,\n Param,\n StringLiteral,\n View,\n ViewElement,\n BusinessComponent,\n CallLogic,\n genHash,\n Unparsed,\n Return,\n ValidationRule,\n getConfig,\n initialize,\n} from '@lcap/nasl-concepts';\nimport {\n isBooleanLiteral,\n isCallLogic,\n isConnector,\n isFrontend,\n isIdentifier,\n isMemberExpression,\n isNullLiteral,\n isNumericLiteral,\n isStringLiteral,\n isView,\n isViewElement,\n} from '@lcap/nasl-concepts/asserts';\nimport * as breakpoint from '@lcap/nasl-breakpoint';\nimport { genMetaData } from '../generator';\nimport { injectable, optional, multiInject } from 'inversify';\nimport { capitalize, isObject, pick } from 'lodash';\nimport { type NASLDomain } from '../service-interface';\nimport { CommonAppConfig } from '../types/config';\nimport {\n BindAttributeIR,\n BindDirectiveIR,\n BindEventIR,\n GeneralComponentIR,\n ComponentInstanceIR,\n Expr,\n ExprIR,\n LogicIR,\n NASLAppIR,\n Package,\n ParamIR,\n ReferencedComponent,\n ViewComponentIR,\n BizComponentIR,\n} from '../types/ir';\nimport { StateActionIR, StateIR, TreeStateIR } from '../types/state';\nimport { assertNever, notImplemented } from '../utils/assert';\nimport {\n ElementRefName,\n componentNameToRefName,\n extractComponentNameFromElementRefName,\n isNameAElementRef,\n} from '../utils/component';\nimport { Logger } from '../utils/logger';\nimport { prepareVariableDefaultValue } from '../utils/nasl';\nimport { startsWithUpperCase, trueKebab2Camel, kebab2Pascal } from '../utils/str';\nimport { isNotNil } from '../utils/types';\nimport {\n IdentifierNameResolver,\n IdentifierResolver,\n javaScriptCodeGenCallBackBag,\n} from './language/javascript-codegen-plugin';\nimport { metadataPlugin } from './misc/metadata-plugin';\nimport { ServiceMetaKind } from '../service-metakind';\nimport {\n getPredefinedLibConstants,\n getPredefinedMaterialConfig,\n} from '../hack/material-config/predefined-dependencies-manager';\n\nexport interface StateManager {\n resolveIdentifier: IdentifierResolver;\n resolveCalleeNamespace: IdentifierNameResolver;\n}\n\nexport interface SyntaxNodePrinter<SyntaxNode> {\n printSyntaxNode: (syntaxNode: SyntaxNode, callbackBag?: javaScriptCodeGenCallBackBag) => string;\n}\n\nexport class StateContextIR {\n constructor(\n public providedStates: StateIR[],\n public consumedStateNames: string[],\n public actions: StateActionIR[],\n private parentCtx: StateContextIR | null\n ) {}\n recursivelyExtractTreeStates(): TreeStateIR[] {\n return [\n ...this.providedStates.filter((x): x is TreeStateIR => x.kind === 'tree'),\n ...(this.parentCtx?.recursivelyExtractTreeStates() ?? []),\n ];\n }\n resolveExprToString<SyntaxNode>(\n syntaxNode: SyntaxNode,\n printer: SyntaxNodePrinter<SyntaxNode>,\n manager: StateManager\n ): string {\n return printer.printSyntaxNode(syntaxNode, {\n resolve({ kind, value }) {\n switch (kind) {\n case 'calleeNamespace':\n return manager.resolveCalleeNamespace(value);\n case 'identifier':\n return manager.resolveIdentifier(value);\n }\n },\n });\n }\n /**\n * 将一个状态上下文作为父上下文,构造空上下文\n * @param parentCtx\n * @returns\n */\n static fromParent(parentCtx: StateContextIR | null) {\n return this.create().setParent(parentCtx);\n }\n setParent(parentCtx: StateContextIR | null) {\n this.parentCtx = parentCtx;\n return this;\n }\n static create() {\n return new StateContextIR([], [], [], null);\n }\n provide(state: StateIR): this {\n this.providedStates.push(state);\n return this;\n }\n provideAction(action: StateActionIR): this {\n this.actions.push(action);\n return this;\n }\n findStateByName(name: string): StateIR | undefined {\n return (\n this.providedStates.find((x) => x.identifier === name) ??\n this.parentCtx?.findStateByName(name)\n );\n }\n findActionByName(name: string): StateActionIR | undefined {\n return this.actions.find((x) => x.name === name) ?? this.parentCtx?.findActionByName(name);\n }\n findComponentRefByComponentName(name: string): StateIR | undefined {\n return (\n this.findStateByName(componentNameToRefName(name)) ??\n this.parentCtx?.findComponentRefByComponentName(name)\n );\n }\n}\n\ntype DeepReadonly<T> = {\n readonly [P in keyof T]: DeepReadonly<T[P]>;\n};\n\nexport type FinalizedStateContextIR = DeepReadonly<StateContextIR>;\n\n/**\n * 收集顶层 View 组件\n */\nfunction collectTopLevelViews(app: App, frontend: Frontend): View[] {\n // 迁移自老代码\n const modules: (Module | Connector)[] = [];\n const views: View[] = [];\n app.dependencies && modules.push(...app.dependencies);\n app.interfaceDependencies && modules.push(...app.interfaceDependencies);\n frontend.views && views.push(...frontend.views);\n modules.forEach((module: Module) => {\n module.views && views.push(...module.views);\n });\n return views;\n}\n\nexport function paramToIR(param: Param): ParamIR {\n return {\n name: param.name,\n typeAnnotation: param.__TypeAnnotation,\n defaultValue: param.defaultValue,\n };\n}\n\nfunction bindDirectiveToIR(b: BindDirective): BindDirectiveIR | undefined {\n if (isIfDirective(b) || isAuthDirective(b)) {\n // 处理authDirective\n if (isAuthDirective(b)) {\n // 将auth指令归约到if指令上\n // expr是一个资源路径,形如\"/test/Switch_1\",其中`Switch_1`是组件的名字,`/test`是页面路径\n // $auth.has(${expr})\n const wrappedExpr = CallFunction.from(\n {\n calleeNamespace: 'nasl.auth',\n calleeName: 'has',\n arguments: [\n Argument.from({ expression: new StringLiteral({ value: b.viewElement.authPath }) }),\n ],\n },\n b.parentNode,\n b.parentKey\n );\n return {\n __raw: b,\n concept: b.concept,\n expression: exprToIR(wrappedExpr),\n kind: 'if',\n };\n } else {\n // 处理普通Directive\n const expr = b.expression;\n if (expr) {\n return {\n __raw: b,\n concept: b.concept,\n expression: exprToIR(expr),\n kind: 'if',\n };\n }\n logger.debug({ nodePath: b.nodePath }, '无expression的directive,可能为脏数据');\n }\n return undefined;\n } else {\n logger.error({ nodePath: b.nodePath }, `遇到了不支持的 directive: ${b.name}`);\n return notImplemented(b);\n }\n\n function isIfDirective(b: BindDirective) {\n return b.name === 'if';\n }\n\n function isAuthDirective(b: BindDirective) {\n return b.name === 'auth';\n }\n}\n\nfunction exprToIR(expr: Expr): ExprIR {\n return {\n expr,\n deps: [],\n };\n}\n\nexport function bindAttrToIR(\n b:\n | BindAttribute\n | (Omit<BindAttribute, 'type' | 'name' | 'rules'> & {\n type: null | undefined;\n name: 'rules';\n rules: ValidationRule[];\n })\n | {\n type: 'component';\n component: ComponentInstanceIR;\n scopeVariable: string | undefined;\n name: string;\n }\n): BindAttributeIR | undefined {\n if (b.type == null && b.name === 'rules') {\n const rules = b.rules;\n return {\n kind: 'validation-rules',\n concept: 'BindAttribute',\n name: 'rules',\n rules: rules ?? [],\n __raw: b as unknown as BindAttribute,\n };\n }\n\n if (!b.type) {\n logger.trace(`bindAttrToIR检查到脏数据, 跳过此属性`);\n logger.trace({ nodePath: b.nodePath, _type: String(b.type) });\n return undefined;\n }\n\n switch (b.type) {\n case 'string': {\n const expr = StringLiteral.from({ value: b.value });\n if (b.sync) {\n logger.error({ nodePath: b.nodePath }, 'string不可为sync');\n throw new Error('string不可为sync');\n }\n // todo: 后续整理到 i18n 插件中统一处理\n if (b.i18nKey && b.value && b.frontend?.i18nInfo?.enabled) {\n b.type = 'dynamic';\n const wrapperExpr = CallFunction.from(\n {\n calleeNamespace: '$i18n',\n calleeName: 't',\n arguments: [Argument.from({ expression: StringLiteral.from({ value: b.i18nKey }) })],\n },\n b.parentNode,\n b.parentKey\n );\n return {\n __raw: b,\n concept: b.concept,\n kind: 'expr',\n expression: exprToIR(wrapperExpr),\n name: b.name,\n sync: false,\n };\n }\n return {\n __raw: b,\n concept: b.concept,\n kind: 'expr',\n expression: exprToIR(expr),\n name: b.name,\n sync: false,\n };\n }\n case 'static':\n case 'dynamic': {\n if (b.type === 'dynamic') {\n // 将destination/externalDestination标准化为expression\n if (b.destination) {\n b.expression = b.destination;\n } else if (b.externalDestination) {\n b.expression = b.externalDestination;\n b.name = 'link';\n }\n }\n return {\n __raw: b,\n concept: b.concept,\n kind: 'expr',\n // @ts-expect-error\n // FIXME wudengke static 需要从b.value上读表达式。目前暂时在react-codegen里面处理\n expression: exprToIR(b.expression),\n name: b.name,\n sync: b.sync ?? false,\n };\n }\n case 'component': {\n return {\n kind: 'render',\n concept: 'BindAttribute',\n component: b.component,\n scopeVariable: b.scopeVariable,\n name: b.name,\n };\n }\n default: {\n // @ts-expect-error FIXME wudengke\n assertNever(b);\n }\n }\n}\n\nexport function logicToLogicIR(logic: Logic): LogicIR {\n return {\n logic,\n deps: [],\n };\n}\n\n// TODO wudengke move\nfunction getHandlerName(eventName: string, elementName?: string) {\n function isView(elementName: string): boolean {\n return ['pc', 'h5'].includes(elementName);\n }\n if (elementName && isView(elementName)) {\n return eventName;\n }\n return trueKebab2Camel(`${elementName ?? ''}-${eventName}`);\n}\n\nexport function inferChangeEventNameFromAttrName(attrName: string) {\n const valueMaps2ChangeEvent: Record<string, string | undefined> = {\n value: 'change',\n checked: 'change',\n };\n return valueMaps2ChangeEvent[attrName] ?? `${attrName}-change`;\n}\n\nexport function bindViewElementEventToIR(b: BindEvent): BindEventIR {\n return {\n __raw: b,\n logics: b.logics.map(logicToLogicIR),\n concept: b.concept,\n params: b.getContextLogicParams().map(paramToIR),\n handlerName: getHandlerName(b.name, b.parentNode.name),\n };\n}\n\nexport function bindEventToAction(b: BindEventIR): StateActionIR {\n return {\n __raw: b.__raw,\n logics: b.logics,\n deps: [],\n name: b.handlerName,\n params: b.params,\n kind: 'standalone',\n };\n}\n\nconst DefaultComponentLibraryName = getPredefinedLibConstants().reactUI.name;\n\nfunction getReferencedLibComponent(e: ViewElement): ReferencedComponent {\n const tag = e.tag;\n if (tag.startsWith('BS')) {\n return {\n kind: 'biz-component',\n tag,\n libraryName: `@/components/${kebab2Pascal(tag.slice(2))}`,\n };\n } else if (startsWithUpperCase(tag)) {\n // FIXME wudengke 查一下usage列表,判断是否在extension中,不然会始终从标准组件库中引入\n const foundExtension = e?.app?.dependencies?.find((dep) => {\n return dep.frontends.some((x) => {\n return x.viewComponents.some((x) => x.name === tag);\n });\n });\n // HACK 组件库不太行\n if (tag === 'Router') {\n return { kind: 'library', libraryName: 'react-router-dom', tag: 'Outlet' };\n }\n const libraryName = foundExtension\n ? `@extension/${foundExtension.name}`\n : DefaultComponentLibraryName;\n return { kind: 'library', libraryName, tag };\n } else if (tag) {\n // TODO wudengke 最好查一下依赖库组件列表\n return { kind: 'library', libraryName: DefaultComponentLibraryName, tag };\n }\n throw new Error('empty tag name!');\n}\n\nfunction hackDataSource(c: ComponentInstanceIR, ctx: StateContextIR) {\n const attrs: (BindAttributeIR | undefined)[] = c.attrs;\n for (let i = 0; i < attrs.length; i++) {\n const b = attrs[i];\n if (!b) {\n continue;\n }\n if (b.kind === 'expr' && b.name === 'dataSource' && b.expression.expr) {\n // case1: 对这类简单表达式直接inline\n if (\n isIdentifier(b.expression.expr) ||\n isMemberExpression(b.expression.expr) ||\n isNumericLiteral(b.expression.expr) ||\n isStringLiteral(b.expression.expr) ||\n isBooleanLiteral(b.expression.expr) ||\n isNullLiteral(b.expression.expr)\n ) {\n // FIXME wudengke toJS 抽象泄露\n const newExpr = CallFunction.from(\n { calleeName: 'toJS', arguments: [new Argument({ expression: b.expression.expr })] },\n b.__raw.parentNode,\n b.__raw.parentKey\n );\n const newIr: BindAttributeIR = {\n ...b,\n expression: { expr: newExpr },\n };\n attrs[i] = newIr;\n continue;\n }\n // case2: 对表达式比较复杂的情形,生成一个dataSourceLoad方法,将dataSource的逻辑放入其中\n\n // FIXME wudengke 正经的 name mangling!\n // 不会对同一个属性有两个nodePath相同的bindAttrbute。因此。因此这个hash是唯一的。\n // TODO wudengke 抽成一个函数\n const suffix = capitalize(genHash(b.__raw.nodePath));\n const prefix = `dataSource${suffix}`;\n const names = {\n queryParam: `event`,\n tempResultVariable: `${prefix}LoadResult`,\n dataFetchMethod: `${prefix}Load`,\n };\n const currentElement = c.__raw;\n const componentRefName = ctx.findComponentRefByComponentName(\n currentElement?.name ?? ''\n )?.identifier;\n // HACK: dataSource中使用到的current, pageSize, sorter, order等属性,需要从queryParam上取\n if (componentRefName) {\n b.expression.expr.traverseStrictChildren((node) => {\n if (isMemberExpression(node)) {\n if (isIdentifier(node.object) && isIdentifier(node.property)) {\n if (\n node.object.name === componentRefName &&\n ['current', 'pageSize', 'sorter', 'order'].includes(node.property.name)\n ) {\n node.object = new Identifier({ name: names.queryParam });\n node.property = new Identifier({ name: node.property.name });\n }\n }\n }\n });\n }\n\n // 其余情形,需要生成一个新的bindEvent,按照bindEvent来处理\n const dataFetchLogic = Logic.from(\n {\n body: [\n new Assignment({\n left: new Identifier({ name: names.tempResultVariable }),\n right: b.expression.expr,\n }),\n new Unparsed({ code: `return ${names.tempResultVariable}` }),\n ],\n params: [new Param({ name: names.queryParam })],\n returns: [\n new Return({\n name: names.tempResultVariable,\n }),\n ],\n },\n b.__raw.parentNode,\n undefined\n );\n const newBindEvent = BindEvent.from(\n {\n name: 'dataSource',\n params: dataFetchLogic.params,\n logics: [dataFetchLogic],\n },\n b.__raw.parentNode,\n 'bindEvents'\n );\n function bindManualBindEventToIR(b: BindEvent): BindEventIR {\n return {\n __raw: b,\n logics: b.logics.map(logicToLogicIR),\n concept: b.concept,\n params: b.getContextLogicParams().map(paramToIR),\n handlerName: names.dataFetchMethod,\n };\n }\n const ir: BindEventIR = bindManualBindEventToIR(newBindEvent);\n // 让当前绑定属性失效,并加一个dataSource的绑定事件\n c.events.push(ir);\n attrs[i] = undefined;\n } else if (b.kind === 'expr' && b.name === 'value' && b.expression.expr) {\n // 对其他的情形,有必要在绑定外面套一层toJS\n // HACK: 暂时只处理value,其他不处理\n if (isIdentifier(b.expression.expr) || isMemberExpression(b.expression.expr)) {\n // FIXME wudengke toJS 抽象泄露,应当放到toMobx中\n const newExpr = CallFunction.from(\n { calleeName: 'toJS', arguments: [new Argument({ expression: b.expression.expr })] },\n b.__raw.parentNode,\n b.__raw.parentKey\n );\n const newIr: BindAttributeIR = {\n ...b,\n expression: { expr: newExpr },\n };\n attrs[i] = newIr;\n continue;\n }\n }\n }\n c.attrs = attrs.filter(isNotNil);\n}\n\nfunction prependBindEventForSyncBindAttribute(c: ComponentInstanceIR) {\n const syncBindAttrs = c.attrs.flatMap((x) => {\n if (x.kind === 'expr' && x.sync) {\n if (x.expression.expr) {\n return [x];\n } else {\n logger.debug(`${x.__raw.nodePath}的expression为空,但仍为双向绑定。已忽略。`);\n }\n }\n return [];\n });\n syncBindAttrs.forEach((x) => {\n logger.debug({ x }, '构造双向绑定的handler');\n const bindEvent = findOrCreateBindEvent();\n // 约定:双向绑定只会将第一个参数赋值给绑定的变量\n const eventParamIR = bindEvent.params.at(0);\n const eventParam = new Param({ name: eventParamIR?.name ?? 'event' });\n // 新建一个Change Handler,负责将event更新到绑定的变量上\n const logic = Logic.from({\n // TODO wudengke 需要找一个不冲突的名字\n name: '_syncChange',\n body: [\n Assignment.from(\n { left: x.expression.expr, right: eventParam },\n x.__raw.parentNode,\n x.__raw.parentKey\n ),\n ],\n params: [eventParam],\n });\n bindEvent.logics.unshift(logicToLogicIR(logic));\n if (!eventParamIR) {\n bindEvent.params.push(paramToIR(eventParam));\n }\n function findOrCreateBindEvent(): BindEventIR {\n const changeEventName = inferChangeEventNameFromAttrName(x.name);\n const eventHandlerName = getHandlerName(changeEventName, x.__raw.parentNode?.name);\n logger.trace({ targetEventName: changeEventName, targetHandlerName: eventHandlerName });\n const found = c.events.find((e) => e.handlerName === eventHandlerName);\n if (found) {\n return found;\n }\n const created = bindViewElementEventToIR(\n BindEvent.from({ logics: [], name: changeEventName }, x.__raw.parentNode, 'bindEvents')\n )!;\n c.events.push(created);\n return created;\n }\n });\n}\n\n/**\n * 将有多个logics的bindEvent拆分成mainAction和被mainAction调用的其他subActions\n * @param originalAction\n * @returns\n */\nfunction splitLogicsInActionToMultipleActions(originalAction: StateActionIR): StateActionIR[] {\n if (originalAction.logics.length > 1) {\n const actions = [];\n const params = originalAction.params.map((x) => Param.from(x));\n // TODO wudengke 观察一下这里是否有问题\n const logics = originalAction.logics.map((l): LogicIR => {\n const name = `${originalAction.name}_${l.logic.name}`;\n const logic = Logic.from({ ...l.logic, params, name }, l.logic.parentNode, l.logic.parentKey);\n logic.body = l.logic.body;\n return logicToLogicIR(logic);\n });\n const mainAction = new StateActionIR({\n ...originalAction,\n logics,\n });\n actions.push(mainAction);\n logics.forEach((l) => {\n const subAction = new StateActionIR({\n ...originalAction,\n name: l.logic.name,\n logics: [l],\n // 需要指定subAction为standalone,用于被mainAction调用\n kind: 'standalone',\n });\n actions.push(subAction);\n });\n return actions;\n } else {\n return [originalAction];\n }\n}\n\n/**\n * 使用 && 合并多个if指令\n */\nfunction mergeMultipleIfDirectivesIntoConjunctiveNormalForm(\n directives: BindDirectiveIR[]\n): BindDirectiveIR[] {\n // 断言所有bindDirectives都是if指令\n if (directives.some((x) => x.kind !== 'if')) {\n logger.error('mergeIfDirectives接收到了不是if指令的bindDirectives');\n throw new Error('mergeIfDirectives接收到了不是if指令的bindDirectives');\n }\n const [baseDirective, ...restDirectives] = directives;\n if (!baseDirective) {\n return directives;\n }\n let mergedExpr = baseDirective.expression.expr;\n for (const cur of restDirectives) {\n mergedExpr = BinaryExpression.from(\n { left: mergedExpr, operator: '&&', right: cur.expression.expr },\n cur.__raw.parentNode,\n cur.__raw.parentKey\n );\n }\n const mergedIfDirective: BindDirectiveIR = {\n kind: 'if',\n concept: 'BindDirective',\n expression: exprToIR(mergedExpr),\n __raw: baseDirective.__raw,\n };\n return [mergedIfDirective];\n}\n\nfunction extractAsComponentInstanceIR(ctx: StateContextIR, e: ViewElement): ComponentInstanceIR {\n const attrs = e.bindAttrs.map(bindAttrToIR).filter(isNotNil);\n const directives = mergeMultipleIfDirectivesIntoConjunctiveNormalForm(\n e.bindDirectives.map(bindDirectiveToIR).filter(isNotNil)\n );\n const c: ComponentInstanceIR = {\n name: e.name,\n directives,\n attrs,\n events: e.bindEvents.map(bindViewElementEventToIR).filter(isNotNil),\n children: e.children.map((x: ViewElement) => {\n return extractAsComponentInstanceIR(ctx, x);\n }),\n component: getReferencedLibComponent(e),\n __raw: e,\n kind: 'component-instance',\n slot: { scope: e.slotScope || undefined, target: normalizeSlotTarget(e.slotTarget) },\n };\n\n prependBindEventForSyncBindAttribute(c);\n hackDataSource(c, ctx);\n c.events.forEach((bind) => {\n const actions = splitLogicsInActionToMultipleActions(bindEventToAction(bind));\n for (const action of actions) {\n ctx.provideAction(action);\n }\n });\n return c;\n function normalizeSlotTarget(targetName: string | undefined): string | undefined {\n if (targetName === 'default' || targetName === '') {\n return undefined;\n }\n return targetName;\n }\n}\n\nfunction collectStatesAndActionsFromView(bcOrView: View | BusinessComponent): {\n consumedStateNames: string[];\n providedStates: StateIR[];\n actions: StateActionIR[];\n} {\n const providedStates: StateIR[] = [];\n const actions: StateActionIR[] = [];\n /**\n * 局部变量声明\n */\n bcOrView.variables.forEach((variable) => {\n const state: StateIR = {\n kind: 'local-logic',\n initialization: {\n kind: 'static',\n value: exprToIR(prepareVariableDefaultValue(variable)),\n },\n identifier: variable.name,\n typeAnnotation: variable.__TypeAnnotation,\n };\n providedStates.push(state);\n });\n /**\n * 页面生命周期handler\n */\n bcOrView.bindEvents.forEach((b) => {\n const isFrontendEvent = isFrontend(b.parentNode);\n const action = new StateActionIR({\n __raw: b,\n logics: b.logics.map(logicToLogicIR),\n deps: [],\n name: b.name,\n params: b.getContextLogicParams().map(paramToIR),\n kind: isFrontendEvent ? 'frontend-lifecycle' : 'view-lifecycle',\n });\n const aggregatedActions = splitLogicsInActionToMultipleActions(action);\n actions.push(...aggregatedActions);\n });\n /**\n * 页面逻辑\n */\n bcOrView.logics.forEach((logic) => {\n actions.push(\n new StateActionIR({\n __raw: logic,\n deps: [],\n name: logic.name,\n params: logic.params.map(paramToIR),\n logics: [logic].map(logicToLogicIR),\n kind: 'standalone',\n })\n );\n });\n\n /**\n * 入参的声明\n */\n bcOrView.params?.forEach((param) => {\n const state: StateIR = {\n kind: 'local-logic',\n initialization: {\n kind: isView(bcOrView) ? 'url-param' : 'props',\n __raw: paramToIR(param),\n defaultValue: param.defaultValue?.expression\n ? exprToIR(param.defaultValue.expression)\n : undefined,\n },\n identifier: param.name,\n typeAnnotation: param.__TypeAnnotation,\n };\n providedStates.push(state);\n });\n const consumedStateNames: string[] = [];\n\n return {\n consumedStateNames,\n providedStates,\n actions,\n };\n}\n\n// 往ctx中插入tree级别的状态\nfunction enhanceStateContext(ctx: StateContextIR): StateContextIR {\n return ctx\n .provide({\n identifier: 'nasl',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useNasl',\n },\n })\n .provide({\n identifier: '$frontendVariables',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'frontend-variable',\n hookName: 'useFrontendVariables',\n },\n })\n .provide({\n identifier: '$services',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useServices',\n },\n })\n .provide({\n identifier: '$destination',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useDestination',\n },\n })\n .provide({\n identifier: '$library',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useLibrary',\n },\n })\n .provide({\n identifier: '$link',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useLink',\n },\n })\n .provide({\n identifier: 'userInfo',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useUserInfo',\n },\n })\n .provide({\n identifier: '$i18n',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useI18n',\n },\n })\n .provide({\n identifier: 'i18nInfo',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useI18nInfo',\n },\n })\n .provide({\n identifier: 'genInitFromSchema',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useGenInitFromSchema',\n },\n });\n}\n\nfunction provideAsComponentRefIfOk(\n ctx: StateContextIR,\n maybeElementRefName: string | undefined\n): StateIR | undefined {\n if (!maybeElementRefName) {\n return undefined;\n }\n if (isNameAElementRef(maybeElementRefName)) {\n const componentName = extractComponentNameFromElementRefName(maybeElementRefName);\n if (!componentName) {\n return undefined;\n }\n const state = ctx.findComponentRefByComponentName(componentName);\n if (state) {\n return state;\n }\n const refName = componentNameToRefName(componentName);\n const newState: StateIR = {\n kind: 'standalone',\n identifier: refName,\n initialization: {\n kind: 'component-ref',\n componentName,\n },\n typeAnnotation: null,\n };\n ctx.provide(newState);\n return newState;\n }\n}\n\nfunction makeBaseCtx(variables: FrontendVariable[]) {\n const baseCtx = new StateContextIR([], [], [], null);\n return enhanceStateContext(baseCtx);\n}\n\nexport const ApiClientIdentifier = 'apiClient';\nfunction collectApis(logics: Logic[], ctx: StateContextIR): LogicIR[] {\n ctx.provide({\n kind: 'tree',\n identifier: ApiClientIdentifier,\n initialization: {\n kind: 'api-client',\n },\n typeAnnotation: null,\n });\n return logics.map(logicToLogicIR);\n}\n\nfunction collectFrontendExtensionModules(app: App): Module[] {\n const modules = app.dependencies\n .map((node): Module | undefined => {\n if (!isConnector(node) && node.frontends?.length) {\n return node;\n }\n })\n .filter(isNotNil);\n return modules;\n}\n\nfunction recursivelyCollectAndTransformViewsOrBizComponents(\n views: BusinessComponent[],\n baseCtx: StateContextIR\n): BizComponentIR[];\nfunction recursivelyCollectAndTransformViewsOrBizComponents(\n views: View[],\n baseCtx: StateContextIR\n): ViewComponentIR[];\nfunction recursivelyCollectAndTransformViewsOrBizComponents(\n views: View[] | BusinessComponent[],\n baseCtx: StateContextIR\n): GeneralComponentIR[] {\n return views.map((view): GeneralComponentIR => {\n const { providedStates, actions } = collectStatesAndActionsFromView(view);\n const ctx = new StateContextIR(providedStates, [], actions, baseCtx);\n // HACK: 跳过Vue3,为了MemberExpression中isViewElementProperty判断\n if (!['vue3'].includes(view.frontend.frameworkKind)) {\n resolveComponentRefInCurrentLevel(view, ctx);\n }\n const elements = view.elements.map((x) => {\n return extractAsComponentInstanceIR(ctx, x);\n });\n recursivelyBindRefAttrIfNecessary(elements);\n\n const base = {\n stateContext: ctx,\n identifier: view.name,\n elements,\n };\n if (isView(view)) {\n const childComponents = recursivelyCollectAndTransformViewsOrBizComponents(\n view.children,\n baseCtx\n );\n return {\n ...base,\n kind: 'view',\n __raw: view,\n childComponents,\n };\n } else {\n return {\n ...base,\n kind: 'biz-component',\n __raw: view,\n };\n }\n\n /**\n * 解析当前层级的组件中对componentRef的引用\n * @param entryComponent 入口组件\n * @param ctx 上下文\n * @description 对View,不会通过children遍历其子级View\n */\n function resolveComponentRefInCurrentLevel(\n entryComponent: View | BusinessComponent,\n ctx: StateContextIR\n ) {\n let copiedChildren: View[] = [];\n if (isView(entryComponent)) {\n // 对View,为了避免遍历到子页面,先清空子页面\n // 对BizComponent则不存在子页面,无需额外处理\n copiedChildren = entryComponent.children;\n entryComponent.children = [];\n }\n\n entryComponent.traverseStrictChildren((node) => {\n if (isObject(node) && 'playground' in node) {\n node.playground = [];\n }\n if (isMemberExpression(node)) {\n if (\n isIdentifier(node.object) &&\n isIdentifier(node.property) &&\n node.object.name === 'elements' &&\n node.property.name === '$ce'\n ) {\n const currentElement = node.getAncestor('ViewElement') as ViewElement | undefined;\n if (currentElement) {\n const elementRefName: ElementRefName = `elements.${currentElement.name}`;\n const state = provideAsComponentRefIfOk(ctx, elementRefName);\n if (state) {\n // HACK: 避免真的去emit update事件,修改NASL\n node.emit = () => {};\n if (node.parentNode) {\n node.parentNode.emit = () => {};\n }\n node.replaceNode({ name: state.identifier, concept: 'Identifier' });\n }\n }\n } else if (\n isIdentifier(node.object) &&\n node.object.namespace === 'elements.$ce.property'\n ) {\n const currentElement = node.getAncestor('ViewElement') as ViewElement | undefined;\n if (currentElement) {\n const elementRefName: ElementRefName = `elements.${currentElement.name}`;\n const state = provideAsComponentRefIfOk(ctx, elementRefName);\n if (state) {\n node.object = new Identifier({ name: state.identifier });\n }\n }\n }\n } else if (isCallLogic(node)) {\n const state = provideAsComponentRefIfOk(ctx, node.calleeNamespace);\n if (state) {\n node.calleeNamespace = state.identifier;\n }\n }\n });\n\n if (isView(entryComponent)) {\n entryComponent.children = copiedChildren;\n }\n }\n function recursivelyBindRefAttrIfNecessary(instances: ComponentInstanceIR[]) {\n instances.forEach((instance) => {\n // FIXME wudengke 去掉这个case\n if (!instance.__raw) {\n return;\n }\n const found = ctx.findComponentRefByComponentName(instance.__raw.name);\n if (found) {\n const be = bindAttrToIR(\n new BindAttribute({\n // TODO wudengke ref属性名称是个react强相关的常量,应该抽到常量列表中\n name: 'ref',\n type: 'dynamic',\n expression: new Identifier({ name: found.identifier }),\n })\n );\n if (be) {\n instance.attrs.push(be);\n }\n }\n recursivelyBindRefAttrIfNecessary(instance.children);\n });\n }\n });\n}\n\nfunction collectAllViews(app: App, frontend: Frontend, ctx: StateContextIR) {\n const topLevelViews = collectTopLevelViews(app, frontend);\n const views = recursivelyCollectAndTransformViewsOrBizComponents(topLevelViews, ctx);\n return views;\n}\n\nfunction collectBizComponents(\n app: App,\n frontend: Frontend,\n ctx: StateContextIR,\n needFrontendEventWrapper: boolean\n) {\n // TODO: 业务组件逻辑抽成一个插件\n const bizComponents =\n app.frontendTypes.find((x) => x.kind === frontend.type)?.businessComponents ?? [];\n\n if (needFrontendEventWrapper) {\n const wrapperBizComponent = BusinessComponent.from({\n bindEvents: [\n ...frontend.bindEvents,\n new BindEvent({\n name: 'rendered',\n logics: [\n new Logic({\n body: [\n CallLogic.from({\n calleeNamespace: 'window',\n calleeName: 'rendered',\n }),\n ],\n }),\n ],\n }),\n ],\n name: 'FrontendEventWrapper',\n params: [],\n elements: [\n new ViewElement({\n tag: 'Router',\n name: 'routerContainer',\n children: [],\n }),\n ],\n });\n bizComponents.push(wrapperBizComponent);\n }\n\n for (const c of bizComponents) {\n c.parentNode = frontend;\n c.traverseStrictChildren((node) => {\n if (isViewElement(node) && node.tag === 'IdeSlot') {\n node.tag = 'template';\n node.bindAttrs.push(\n BindAttribute.from(\n {\n name: 'children',\n type: 'dynamic',\n expression: MemberExpression.from({\n object: {\n concept: 'Identifier',\n name: 'props',\n folded: false,\n },\n property: {\n concept: 'Identifier',\n name: trueKebab2Camel(node.name),\n folded: false,\n },\n }),\n },\n node,\n 'bindAttrs'\n )\n );\n }\n });\n }\n const components = recursivelyCollectAndTransformViewsOrBizComponents(bizComponents, ctx);\n return components;\n}\n\nconst logger = Logger('IR builder');\n\n@injectable()\nexport class NASLAppIRBuilderPlugin implements NASLDomain.IRBuilder {\n constructor(\n @multiInject(ServiceMetaKind.IRPreProcesser)\n @optional()\n private preProcessors?: NASLDomain.IRPreProcesser[],\n @multiInject(ServiceMetaKind.IRPostProcesser)\n @optional()\n private postProcessors?: NASLDomain.IRPostProcesser[]\n ) {}\n\n private selfBuildIR(app: App, frontend: Frontend, config: CommonAppConfig) {\n {\n config.debug && breakpoint.genBreakpoints(app);\n const baseCtx = makeBaseCtx(frontend.variables);\n const apis = collectApis(app.logics, baseCtx);\n const views = collectAllViews(app, frontend, baseCtx);\n const bizComponents = collectBizComponents(\n app,\n frontend,\n baseCtx,\n !!config.needFrontendEventWrapper\n );\n views.flatMap((x) => x.childComponents);\n\n let ir = {\n baseCtx,\n configs: buildConfigs(),\n apis,\n views,\n bizComponents,\n packages: collectPackages(),\n };\n\n return ir;\n\n function buildConfigs(): NASLAppIR['configs'] {\n const self = { ...metadataPlugin.functions };\n const basePlatformConfig = self.makeBasePlatformConfig(app, frontend, config);\n const metaData = genMetaData(app, frontend, config);\n const events = frontend.bindEvents.map(bindViewElementEventToIR).filter(isNotNil);\n return {\n config,\n basePlatformConfig,\n events,\n metaData,\n globalVariables: frontend.variables,\n themeCSS: frontend.genThemeCSS(),\n document: {\n icon: frontend.documentIcon,\n },\n frontendDesc: frontend,\n microApp: app.integration?.microApp,\n };\n }\n\n function collectPackages(): Package[] {\n const extensionPackages: Package[] = collectFrontendExtensionModules(app).map((m) => {\n return { kind: 'extension', name: m.name, version: m.version, hasCss: true };\n });\n logger.debug({ extensionPackages });\n\n const frameworkKind = frontend.frameworkKind;\n const libs = getPredefinedLibConstants();\n return [...extensionPackages, frameworkKind === 'vue3' ? libs.vue3Ui : libs.reactUI];\n }\n }\n }\n\n buildIR(app: App, frontend: Frontend, config: CommonAppConfig): NASLAppIR {\n this.enchanceHackForAppPackageInfos(app, config);\n this.preProcessors?.forEach((processor) => {\n const res = processor.preProcess(app, frontend, config);\n app = res.app;\n frontend = res.frontend;\n config = res.config;\n });\n let ir = this.selfBuildIR(app, frontend, config);\n this.postProcessors?.forEach((processor) => {\n ir = processor.postProcess(ir, config);\n });\n return ir;\n }\n\n private enchanceHackForAppPackageInfos(app: App, commonAppConfig: CommonAppConfig) {\n app.loadPackageInfos(getPredefinedMaterialConfig());\n const config = getConfig();\n if (commonAppConfig.allNodesAPI) {\n config.allNodesAPI = commonAppConfig.allNodesAPI;\n }\n config.allNodesAPI ??= {};\n initialize({\n getConfig: () => {\n return config;\n },\n });\n }\n}\n","import {\n App,\n Module,\n View,\n Entity,\n Structure,\n Enum,\n uiStructures,\n collectionStructures,\n configurationEnums,\n processV2Enums,\n interfaceStructures,\n processStructures,\n processV2Structures,\n Connector,\n Logic,\n Interface,\n Process,\n BaseNode,\n Frontend,\n authStructures,\n httpStructures,\n MetadataType,\n TypeAnnotation,\n asserts,\n errorStructures,\n SyntaxNode,\n FrontendType,\n} from '@lcap/nasl-concepts';\n\nimport { createCompilerState } from '@lcap/nasl-translator';\nimport { sanityCheck, toRaw } from './utils';\n\n// 生成typeKey\nfunction genSortedTypeKey(typeAnnotation: any) {\n const { typeKind, typeNamespace, typeName, typeArguments, properties } = typeAnnotation || {};\n const typeKeyArr = [];\n if (typeKind === 'union') {\n // 联合类型\n if (Array.isArray(typeArguments)) {\n // 按返回的每个具体项排序\n const childTypeArgs: any = typeArguments\n .map((typeArg) => genSortedTypeKey(typeArg))\n .sort((name1, name2) => (name1 > name2 ? 1 : -1));\n typeKeyArr.push(childTypeArgs.join(' | '));\n }\n } else if (typeKind === 'anonymousStructure') {\n // 匿名数据结构\n typeKeyArr.push('{');\n if (Array.isArray(properties)) {\n // 按匿名数据结构的key排序\n const childTypeArgs: any = properties\n .sort(({ name: name1 }, { name: name2 }) => (name1 > name2 ? 1 : -1))\n .map((typeArg) => {\n const { name: typeArgName, typeAnnotation: typeArgTypeAnnotation } = typeArg || {};\n return `${typeArgName}: ${genSortedTypeKey(typeArgTypeAnnotation)}`;\n });\n typeKeyArr.push(childTypeArgs.join(', '));\n }\n typeKeyArr.push('}');\n } else {\n const typeArr = [];\n typeNamespace && typeArr.push(typeNamespace);\n typeName && typeArr.push(typeName);\n const typeKey = typeArr.join('.');\n typeKey && typeKeyArr.push(typeKey);\n if (typeKind === 'generic') {\n typeKeyArr.push('<');\n if (Array.isArray(typeArguments)) {\n // 必须按typeArguments定义的顺序,否则实参位置不对\n const childTypeArgs: any = typeArguments.map((typeArg) => genSortedTypeKey(typeArg));\n typeKeyArr.push(childTypeArgs.join(', '));\n }\n typeKeyArr.push('>');\n }\n }\n return typeKeyArr.join('');\n}\n\nexport function genMetaData(_app: App, frontend: Frontend, config: any) {\n const isPreviewFe = config?.isPreviewFe ?? false;\n const isPureFeMode = config?.isPureFeMode ?? false;\n const isExport = config?.isExport ?? false;\n const modules: (Module | Connector)[] = [];\n const views: View[] = [];\n const entities: Entity[] = [];\n const structures: Structure[] = [];\n const enums: Enum[] = [];\n const logics: Logic[] = [];\n const interfaces: Interface[] = [];\n const processes: Process[] = [];\n\n // @ts-expect-error\n const app: App = _app.__v_raw ?? _app;\n frontend.views && views.push(...frontend.views);\n if (Array.isArray(app.dataSources)) {\n app.dataSources.forEach((dataSource) => {\n if (Array.isArray(dataSource.entities)) {\n entities.push(...dataSource.entities);\n }\n });\n }\n app.structures && structures.push(...app.structures);\n app.enums && enums.push(...app.enums);\n app.logics && logics.push(...app.logics);\n app.processes && processes.push(...app.processes);\n\n app.dependencies && modules.push(...app.dependencies);\n app.interfaceDependencies && modules.push(...app.interfaceDependencies);\n app.connectorDependencies && modules.push(...app.connectorDependencies);\n app.sharedAppDependencies && modules.push(...app.sharedAppDependencies);\n\n // 内置国际化枚举\n enums.push(...configurationEnums);\n // 内置流程枚举\n enums.push(...processV2Enums);\n app.interfaces.forEach((it) => {\n it && interfaces.push(it as Interface);\n });\n modules.forEach((module: Module | Connector) => {\n module.views && views.push(...module.views);\n module.structures && structures.push(...module.structures);\n module.enums && enums.push(...module.enums);\n module.logics && logics.push(...module.logics);\n module.interfaces && interfaces.push(...(module.interfaces as Interface[]));\n if (Array.isArray(module.dataSources)) {\n module.dataSources.forEach((dataSource) => {\n if (Array.isArray(dataSource.entities)) {\n entities.push(...dataSource.entities);\n }\n });\n }\n\n if (asserts.isConnector(module)) {\n module.namespaces.forEach((namespace) => {\n logics.push(...namespace.logics);\n });\n }\n });\n const dataTypes: (Entity | Structure | Enum)[] = [];\n\n const dataTypesMap: {\n [id: string]: BaseNode;\n } = {};\n const originFrontendVariables = frontend.variables || [];\n const frontendEvents = frontend.bindEvents;\n const frontendEventsMap: { [id: string]: string } = {};\n\n const enumsMap: {\n [name: string]: {\n [label: string]: string;\n };\n } = {};\n\n const logicsMap: {\n [id: string]: {\n config: {\n serviceType: string;\n };\n url: {\n method: string;\n path: string;\n };\n };\n } = {};\n const _custom: {\n [id: string]: any;\n } = {};\n const allLogics: Logic[] = [];\n\n if (Array.isArray(enums)) {\n dataTypes.push(...enums);\n enums.forEach((node) => {\n let { name, enumItems } = node || {};\n if (node.module) {\n const prefix = node.module.type === 'sharedApp' ? 'sharedApp' : 'extensions';\n name = `${prefix}.${node.module.name}.enums.${name}`;\n } else if (node.name === 'I18nEnum' && node.getNamespace() === 'nasl.configuration.enums') {\n name = 'nasl.configuration.enums.I18nEnum';\n } else if (node?.getNamespace?.() === 'nasl.processV2.enums') {\n name = `nasl.processV2.enums.${name}`;\n }\n const enumObj: {\n [value: string]: string;\n } = {};\n enumItems.forEach(({ label, value }) => {\n enumObj[value] = label?.value;\n });\n enumsMap[name] = enumObj;\n });\n }\n\n if (Array.isArray(entities)) {\n dataTypes.push(...entities);\n entities.forEach((entity) => {\n const { ns } = entity;\n if (Array.isArray(ns?.logics)) {\n allLogics.push(...ns.logics);\n }\n });\n }\n\n if (Array.isArray(structures)) {\n dataTypes.push(...structures);\n }\n\n dataTypes.forEach((node) => {\n const namespace = node.getNamespace();\n const id = `${namespace}.${node.name}`;\n const nodeJson = node.toJSON?.();\n\n if (['Enum'].includes(node.concept)) {\n const { typeName, typeNamespace } = (node as Enum).valueType || {};\n nodeJson.enumItems?.map((item: any) => {\n item.value =\n typeName === 'Long' && typeNamespace === 'nasl.core' ? +item.value : item.value;\n });\n }\n\n // 对存在defaultValue的结构进行翻译储存到defaultCode中\n if (['Entity', 'Structure'].includes(node.concept)) {\n nodeJson.properties.forEach((property: any, index: number) => {\n const { defaultValue } = (node as Entity).properties[index];\n if (defaultValue?.expression) {\n property.defaultCode = {\n code: defaultValue.toJS(createCompilerState('', { getVuePrototype: true })),\n executeCode: [\n 'NewComposite',\n 'NewList',\n 'NewMap',\n 'StringInterpolation',\n 'BinaryExpression',\n 'UnaryExpression',\n 'StringLiteral',\n ].includes(defaultValue.expression.concept),\n };\n } else {\n property.defaultCode = {};\n }\n });\n }\n if (Array.isArray(nodeJson.properties)) {\n const app = node.getAncestor('App') as App;\n nodeJson.properties.forEach((property: any) => {\n const { typeAnnotation = {} } = property;\n if (typeAnnotation?.typeNamespace?.endsWith('.metadataTypes')) {\n let originType: TypeAnnotation | undefined;\n if (typeAnnotation.typeNamespace === 'app.metadataTypes') {\n originType = app.metadataTypes?.find(\n (metadataType: MetadataType) => metadataType.name === typeAnnotation.typeName\n )?.typeAnnotation;\n } else if (\n typeAnnotation.typeNamespace?.startsWith('extensions.') &&\n typeAnnotation.typeNamespace?.endsWith('.metadataTypes')\n ) {\n const dependencyName = typeAnnotation.typeNamespace\n ?.replace('extensions.', '')\n .replace('.metadataTypes', '');\n originType =\n app.dependencies\n ?.find((dependency: Module) => dependency.name === dependencyName)\n ?.metadataTypes?.find((ele: MetadataType) => ele.name === typeAnnotation.typeName)\n ?.typeAnnotation ?? ({} as TypeAnnotation);\n }\n typeAnnotation.typeKind = 'primitive';\n typeAnnotation.typeNamespace = 'nasl.core';\n typeAnnotation.typeName = originType?.typeName;\n }\n });\n }\n dataTypesMap[id] = nodeJson;\n const { properties } = node as any;\n if (Array.isArray(properties)) {\n properties.forEach((property) => {\n collectTypeAnnotation(property?.typeAnnotation);\n });\n }\n });\n\n [\n {\n namespace: 'nasl.auth',\n list: authStructures,\n },\n {\n namespace: 'nasl.ui',\n list: uiStructures,\n },\n {\n namespace: 'nasl.collection',\n list: collectionStructures,\n },\n {\n namespace: 'nasl.interface',\n list: interfaceStructures,\n },\n {\n namespace: 'nasl.process',\n list: processStructures,\n },\n {\n namespace: 'nasl.processV2',\n list: processV2Structures,\n },\n {\n namespace: 'nasl.http',\n list: httpStructures,\n },\n {\n namespace: 'nasl.error',\n list: errorStructures,\n },\n ].forEach((item) => {\n const { namespace, list } = item || {};\n if (Array.isArray(list)) {\n list.forEach((node) => {\n const id = `${namespace}.${node.name}`;\n dataTypesMap[id] = node.toJSON?.();\n const { properties } = node as any;\n if (Array.isArray(properties)) {\n properties.forEach((property, index) => {\n collectTypeAnnotation(property?.typeAnnotation);\n const defaultValue = property.defaultValue;\n if (defaultValue?.expression) {\n // @ts-expect-error\n const propertyJSON = dataTypesMap[id]?.properties?.[index];\n if (propertyJSON) {\n const defaultCode = {\n code: defaultValue.toJS(createCompilerState('')),\n executeCode: [\n 'NewComposite',\n 'NewList',\n 'NewMap',\n 'StringInterpolation',\n 'BinaryExpression',\n 'UnaryExpression',\n 'StringLiteral',\n ].includes(defaultValue.expression.concept),\n };\n propertyJSON.defaultCode = defaultCode;\n }\n }\n });\n }\n });\n }\n });\n\n if (Array.isArray(logics)) {\n allLogics.push(...logics);\n }\n\n allLogics.forEach((node) => {\n const namespace = node.getNamespace();\n const id = namespace ? `${namespace}.${node.name}` : node.name;\n logicsMap[id] = isPreviewFe ? node.toMockService() : node.toService();\n });\n\n processes.forEach((process) => {\n if (Array.isArray(process.logics)) {\n process.logics.forEach((node) => {\n const namespace = node.getNamespace();\n const id = namespace ? `${namespace}.${node.name}` : node.name;\n logicsMap[id] = node.toProcessService();\n });\n }\n });\n\n interfaces.forEach((interfaceItem: Interface) => {\n let result: any = interfaceItem.toService();\n if (isPureFeMode && isExport) {\n // \"/gw/zzze/rest/axax\"把 /gw/zzze 替换成真实域名\n // result.url.path = result.url.path.replace(/^\\/[^/]+\\/[^/]+\\//, `${svcDomain}/`);\n result.url.path = result.url.path.replace(/^\\/[^/]+\\/[^/]+\\//, '/');\n }\n if (isPreviewFe) {\n result = interfaceItem.toMockService();\n }\n\n _custom[`${interfaceItem.getNamespace()}.${interfaceItem.name}`] = result;\n });\n\n function shouldSkipThisNode(nd: SyntaxNode | undefined) {\n if (!nd) {\n return true;\n }\n if (nd.concept === 'ViewElement') {\n return true;\n }\n if (\n nd.concept === 'Identifier' &&\n nd.parentNode?.concept === 'MemberExpression' &&\n nd.parentNode?.property?.name === '$ce'\n ) {\n return true;\n }\n return false;\n }\n\n const f: FrontendType | Frontend = toRaw(frontend?.getAncestor('FrontendType') || frontend);\n f?.traverseStrictChildren(\n (node: SyntaxNode) => {\n if (shouldSkipThisNode(node)) {\n return;\n }\n // @ts-expect-error .typeAnnotation 类型有问题\n const ty: TypeAnnotation | undefined = node?.typeAnnotation || node?.__TypeAnnotation;\n collectTypeAnnotation(ty);\n },\n ['virtualParams']\n );\n\n const frontendVariables = [...originFrontendVariables];\n if (Array.isArray(frontendVariables)) {\n frontendVariables?.forEach((frontendVariable) => {\n const { defaultValue } = frontendVariable;\n const typeAnnotation = frontendVariable.typeAnnotation || frontendVariable.__TypeAnnotation;\n if (typeAnnotation?.typeNamespace?.endsWith('.metadataTypes')) {\n const referenceNode =\n app?.findNodeByCompleteName(\n typeAnnotation.typeNamespace + '.' + typeAnnotation.typeName\n ) || {};\n const typeAn = referenceNode.typeAnnotation || {};\n typeAnnotation.typeKind = typeAn.typeKind;\n typeAnnotation.typeNamespace = typeAn.typeNamespace;\n typeAnnotation.typeName = typeAn.typeName;\n }\n if (defaultValue?.expression) {\n frontendVariable.defaultCode = {\n code: defaultValue.toJS(createCompilerState('', { getVuePrototype: true })),\n executeCode: [\n 'NewComposite',\n 'NewList',\n 'NewMap',\n 'StringInterpolation',\n 'BinaryExpression',\n 'UnaryExpression',\n 'StringLiteral',\n ].includes(defaultValue.expression.concept),\n };\n } else {\n frontendVariable.defaultCode = {};\n }\n collectTypeAnnotation(typeAnnotation);\n });\n }\n if (Array.isArray(frontendEvents)) {\n frontendEvents.forEach((item) => {\n const typeAnnotation = (item as any)?.typeAnnotation || item.__TypeAnnotation;\n collectTypeAnnotation(typeAnnotation);\n });\n }\n\n function collectTypeAnnotation(typeAnnotation: TypeAnnotation | undefined) {\n // FIXME wudengke 确认是否需要这个东西\n if (typeAnnotation && sanityCheck(typeAnnotation)) {\n const sortedTypeKey = genSortedTypeKey(typeAnnotation);\n if (!dataTypesMap[sortedTypeKey]) {\n const json = typeAnnotation?.toJSON?.() ?? typeAnnotation;\n // HACK: 删掉 name,但故意不处理 name=\"\"的情形\n if (json.name !== '') {\n delete json.name;\n }\n dataTypesMap[sortedTypeKey] = json;\n const { properties, typeArguments } = (dataTypesMap[sortedTypeKey] || {}) as any;\n if (Array.isArray(properties)) {\n properties.forEach((property) => {\n collectTypeAnnotation(property?.typeAnnotation);\n });\n }\n if (Array.isArray(typeArguments)) {\n typeArguments.forEach((typeArg) => {\n collectTypeAnnotation(typeArg);\n });\n }\n }\n }\n }\n frontendEvents.forEach((logic) => {\n const name = logic.getViewEventName();\n const fn = (logic as any).toFunction();\n frontendEventsMap[name] = fn;\n if (isPureFeMode) {\n delete frontendEventsMap.beforeRouter;\n }\n });\n return {\n frontendEvents: frontendEventsMap,\n frontendVariables,\n dataTypesMap: dataTypesMapTrimming(dataTypesMap),\n enumsMap,\n logicsMap,\n servicesMap: {\n _custom,\n },\n };\n}\n\nfunction dataTypesMapTrimming(res: { [id: string]: BaseNode }): { [id: string]: BaseNode } {\n function deleteEnumItemsTypeAnnotation() {\n Object.keys(res).forEach((key) => {\n const value = res[key];\n if (value?.concept === 'Enum') {\n const e = value as Enum;\n e.enumItems?.forEach((x) => {\n if (x.label) {\n // @ts-expect-error\n delete x.label.typeAnnotation;\n }\n });\n }\n });\n }\n\n function deleteChangedTime() {\n // 删掉 _changedTime 字段\n Object.keys(res).forEach((key) => {\n const value = res[key];\n if (value && '_changedTime' in value) {\n // @ts-expect-error\n delete value._changedTime;\n }\n });\n }\n // TODO wudengke 直接在类型检查器中修复\n function deleteDefaultValueTypeAnnotationForNullExpression() {\n Object.keys(res).forEach((key) => {\n const value = res[key];\n // 预期: value 为 Structure 和 Entity\n if ('properties' in value) {\n const s = value as Structure | Entity;\n s.properties?.forEach((p) => {\n // @ts-expect-error\n if (p.defaultValue?.expression === null && p.defaultValue.typeAnnotation) {\n // @ts-expect-error\n delete p.defaultValue.typeAnnotation;\n }\n });\n }\n });\n }\n deleteEnumItemsTypeAnnotation();\n deleteChangedTime();\n deleteDefaultValueTypeAnnotationForNullExpression();\n return res;\n}\n","import { type TypeAnnotation } from '@lcap/nasl-concepts';\nimport { union, uniq } from 'lodash';\nimport { isNotNil } from '../utils/types';\n\ntype TypeAnnotationVisitor = Partial<\n Record<TypeAnnotation['typeKind'], (ty: TypeAnnotation, boundParamNames: string[]) => void>\n>;\n\nexport const visitTypeAnnotation = (\n ty: TypeAnnotation,\n visitor: TypeAnnotationVisitor,\n paramNames: string[] = []\n): void => {\n if (!ty) {\n return;\n }\n\n switch (ty.typeKind) {\n case 'primitive':\n visitor.primitive?.(ty, paramNames);\n break;\n case 'literal':\n visitor.literal?.(ty, paramNames);\n break;\n case 'typeParam':\n visitor.typeParam?.(ty, paramNames);\n break;\n case 'union':\n visitor.union?.(ty, paramNames);\n if (Array.isArray(ty.typeArguments)) {\n ty.typeArguments.forEach((typeArg) => {\n visitTypeAnnotation(typeArg, visitor, paramNames);\n });\n }\n break;\n case 'anonymousStructure':\n visitor.anonymousStructure?.(ty, paramNames);\n if (Array.isArray(ty.properties)) {\n ty.properties.forEach((property) => {\n if (property.typeAnnotation) {\n visitTypeAnnotation(property.typeAnnotation, visitor, paramNames);\n }\n });\n }\n break;\n case 'generic':\n visitor.generic?.(ty, paramNames);\n if (Array.isArray(ty.typeArguments)) {\n ty.typeArguments.forEach((typeArg) => {\n visitTypeAnnotation(typeArg, visitor);\n });\n }\n break;\n case 'conditional':\n visitor.conditional?.(ty, paramNames);\n if (ty.checkType) {\n visitTypeAnnotation(ty.checkType, visitor);\n }\n if (ty.extendsType) {\n visitTypeAnnotation(ty.extendsType, visitor);\n }\n if (ty.trueType) {\n visitTypeAnnotation(ty.trueType, visitor);\n }\n if (ty.falseType) {\n visitTypeAnnotation(ty.falseType, visitor);\n }\n break;\n case 'function': {\n visitor.function?.(ty, paramNames);\n const newParamNames = union(\n paramNames,\n (ty.typeParams?.map((param) => param.typeName) || []).filter(isNotNil)\n );\n if (ty.typeArguments) {\n ty.typeArguments.forEach((param) => {\n visitTypeAnnotation(param, visitor, newParamNames);\n });\n }\n if (ty.returnType) {\n ty.returnType.forEach((returnType) => {\n visitTypeAnnotation(returnType, visitor, newParamNames);\n });\n }\n break;\n }\n case 'indexedAccess':\n visitor.indexedAccess?.(ty, paramNames);\n if (ty.objectType) {\n visitTypeAnnotation(ty.objectType, visitor, paramNames);\n }\n if (ty.indexType) {\n visitTypeAnnotation(ty.indexType, visitor, paramNames);\n }\n break;\n case 'reference':\n visitor.reference?.(ty, paramNames);\n break;\n default: {\n const checkExhaustive: never = ty.typeKind;\n }\n }\n};\n\nconst hasNaslTyParamAnn = (ty: TypeAnnotation): boolean => {\n if (!ty) {\n return false;\n }\n\n if (ty.typeKind === 'primitive' || ty.typeKind === 'literal') {\n return false;\n }\n\n if (ty.typeKind === 'typeParam') {\n return true;\n }\n\n if (ty.typeArguments?.length) {\n for (const typeArg of ty.typeArguments) {\n if (hasNaslTyParamAnn(typeArg)) return true;\n }\n }\n\n if (ty.returnType?.length) {\n for (const retType of ty.returnType) {\n if (hasNaslTyParamAnn(retType)) return true;\n }\n }\n\n if (ty.properties?.length) {\n for (const prop of ty.properties) {\n if (prop.typeAnnotation && hasNaslTyParamAnn(prop.typeAnnotation)) return true;\n }\n }\n\n if (ty.constraints && hasNaslTyParamAnn(ty.constraints)) {\n return true;\n }\n\n if (ty.checkType && hasNaslTyParamAnn(ty.checkType)) return true;\n if (ty.extendsType && hasNaslTyParamAnn(ty.extendsType)) return true;\n if (ty.trueType && hasNaslTyParamAnn(ty.trueType)) return true;\n if (ty.falseType && hasNaslTyParamAnn(ty.falseType)) return true;\n if (ty.indexType && hasNaslTyParamAnn(ty.indexType)) return true;\n if (ty.objectType && hasNaslTyParamAnn(ty.objectType)) return true;\n\n return false;\n};\n\n/**\n * @deprecated 统一处理!!!\n * @param observed\n * @returns\n */\nexport function toRaw<T>(observed: T): T {\n const raw = observed && (observed as any).__v_raw;\n return raw ? toRaw(raw) : observed;\n}\n\n/**\n * 检查类型标注是否合(某个隐式的)法\n * @param ty\n * @returns\n * @deprecated 临时用一下\n */\nexport function sanityCheck(ty: TypeAnnotation | undefined | null): ty is TypeAnnotation {\n if (!ty) {\n return false;\n }\n let failed = false;\n visitTypeAnnotation(ty, {\n typeParam: (t, boundParamNames) => {\n // 出现自由类型变元,则失败\n failed ||= !boundParamNames.includes(t.typeName ?? 'what');\n },\n primitive: (t) => {\n // 出现奇怪的东西,则失败\n failed ||= t.typeName === 'void' || t.typeName === 'any';\n },\n function: (t) => {\n failed = true;\n },\n anonymousStructure: (t) => {},\n generic: (t) => {},\n conditional: (t) => {},\n union: (t) => {},\n reference: (t) => {},\n indexedAccess: (t) => {\n failed = true;\n },\n literal: () => {\n failed = true;\n },\n });\n return !failed;\n}\n","export function isNotNil<T>(x: T): x is NonNullable<T> {\n return x !== null && x !== undefined;\n}\n\nexport function ensureArray<T>(value: T | T[]): T[] {\n if (Array.isArray(value)) {\n return value;\n }\n return [value];\n}\n","import { BindEvent, Logic } from '@lcap/nasl-concepts';\nimport { ExprIR, IdentifierString, LogicIR, ParamIR, TypeAnnotationIR } from './ir';\nimport { ComponentName } from '../utils/component';\n\ntype BaseStateIR = {\n /**\n * 状态的标识符\n */\n identifier: IdentifierString;\n /**\n * 状态的类型\n */\n typeAnnotation: TypeAnnotationIR | null;\n};\n\nexport type LocalLogicStateIR = BaseStateIR & {\n kind: 'local-logic';\n initialization:\n | {\n kind: 'static';\n value: ExprIR;\n }\n | {\n kind: 'props';\n defaultValue?: ExprIR;\n __raw: ParamIR;\n }\n | {\n kind: 'url-param';\n defaultValue?: ExprIR;\n __raw: ParamIR;\n }\n | undefined;\n};\n\nexport type TreeStateIR = BaseStateIR & {\n kind: 'tree';\n initialization:\n | {\n kind: 'global-hook';\n hookName: string;\n }\n | {\n // 前端全局变量\n kind: 'frontend-variable';\n hookName: 'useFrontendVariables';\n }\n | {\n kind: 'api-client';\n };\n};\n\nexport type LocalIndividualStateIRComponentRef = {\n kind: 'standalone';\n initialization: {\n kind: 'component-ref';\n componentName: ComponentName;\n };\n};\n\nexport type LocalVariableStateIR = {\n kind: 'standalone';\n initialization: {\n kind: 'variable';\n left: string;\n right: string;\n };\n};\n\nexport type LocalIndividualStateIR = BaseStateIR &\n (LocalIndividualStateIRComponentRef | LocalVariableStateIR);\n\n/**\n * 状态\n */\nexport type StateIR = LocalIndividualStateIR | TreeStateIR | LocalLogicStateIR;\nexport class StateActionIR {\n __raw: BindEvent | Logic;\n // TODO wudengke 说不定可以去掉\n deps?: StateIR[];\n params: ParamIR[];\n logics: LogicIR[];\n /**\n * 这个动作handler的名字\n * @example handleClick\n */\n name: string;\n kind:\n | 'standalone'\n /**\n * 页面级别的生命周期\n */\n | 'view-lifecycle'\n /**\n * 端级别的生命周期\n */\n | 'frontend-lifecycle';\n constructor(props: StateActionIR) {\n Object.assign(this, props);\n }\n}\n\nexport function isLocalIndividualStateIRComponentRef(ir: StateIR): ir is LocalIndividualStateIR & LocalIndividualStateIRComponentRef {\n return ir.kind === 'standalone' && ir.initialization.kind === 'component-ref';\n}\n","import { isNotNil } from './types';\n\n/**\n * @deprecated\n */\nexport function todo(): never {\n throw new Error('todo');\n}\n\nexport function notImplemented(a?: unknown): never {\n const value = a ? JSON.stringify(a) : String(a);\n throw new Error(`not implemented for ${value}`);\n}\n\nexport function neverImplemented(a?: unknown): never {\n const value = a ? JSON.stringify(a) : String(a);\n throw new Error(`never implemented for ${value}. Should never be here!`);\n}\n\nexport function assertNever(a?: never): never {\n throw new Error(`assertNever failed: ${JSON.stringify(a)}`);\n}\n\nexport function assertNotEmptyString<T extends string | undefined | null>(s: T, msg?: string) {\n if (s !== '') {\n return;\n }\n throw new Error(`[非空串断言失败] 预期非空: ${msg ?? s}`);\n}\n\nexport function assertNotNil<T>(s: T, msg?: string): asserts s is NonNullable<T> {\n if (isNotNil(s)) {\n return;\n }\n throw new Error(`[非空断言失败] 预期非空: ${msg ?? s}`);\n}\n","import { GeneralComponentIR, ReferencedComponent, ReferencedLibComponent } from '../types/ir';\n\n/**\n * @example \"elements.saveModal.logics\"\n */\nexport type ElementRefName = `elements.${string}`;\n/**\n * @example \"tableView_1\"\n */\nexport type ComponentName = string & { readonly __tag?: 'componentName' };\nexport const isNameAElementRef = (name: string): name is ElementRefName => {\n const ComponentRefPrefix = 'elements.';\n return name.startsWith(ComponentRefPrefix);\n};\nexport const extractComponentNameFromElementRefName = (\n name: ElementRefName\n): ComponentName | undefined => {\n return name.split('.').at(1);\n};\n\nexport const componentNameToRefName = (name: string): string => {\n return `${name}Ref`;\n};\nexport function isComponentFromLib(c: ReferencedComponent): c is ReferencedLibComponent {\n return c.kind === 'library';\n}\n\nexport function isReferencedComponentATemplate(c: ReferencedComponent): boolean {\n return c.tag === 'template';\n}\n","import { Argument, CallFunction, StringLiteral, Unparsed, Variable } from '@lcap/nasl-concepts';\n\nexport function findConceptKeyWordIndexFromNamespace(namespace: string, keyword: string) {\n const namespaceArr = namespace?.split('.') || [];\n const start = namespaceArr[0];\n const mod = start === 'app' ? 1 : 0;\n return namespaceArr.findIndex((namespaceItem, index) => {\n if (index % 2 === mod) {\n return namespaceItem === keyword;\n }\n return false;\n });\n}\n\nexport function prepareVariableDefaultValue(s: Variable) {\n const typeAnnotation = s.typeAnnotation || s.__TypeAnnotation;\n let { sortedTypeKey, typeKind, typeName, typeNamespace } = typeAnnotation || {};\n if (typeNamespace?.endsWith('.metadataTypes')) {\n const referenceNode = s.app.findNodeByCompleteName(typeNamespace + '.' + typeName) || {};\n const typeAn = referenceNode.typeAnnotation || {};\n sortedTypeKey = `${typeAn.typeNamespace}.${typeAn.typeName}`;\n typeKind = typeAn.typeKind;\n typeName = typeAn.typeName;\n }\n const needGenInitFromSchema = typeAnnotation && (!['primitive'].includes(typeKind) || typeName === 'DateTime');\n const defaultExpr = s.defaultValue?.expression ? s.defaultValue.expression : new Unparsed({ code: undefined });\n if (needGenInitFromSchema) {\n const newNode = CallFunction.from(\n {\n calleeName: 'genInitFromSchema',\n arguments: [new Argument({ expression: new StringLiteral({ value: sortedTypeKey }) }), new Argument({ expression: defaultExpr })],\n },\n s.parentNode,\n s.parentKey\n );\n return newNode;\n }\n return defaultExpr;\n}\n","import { firstUpperCase } from '@lcap/nasl-utils';\nimport { isNotNil } from './types';\n\nexport const trueKebab2Camel = (name: string) => {\n return name.replaceAll('_', '-').replace(/(?:-)([a-zA-Z0-9])/g, (m, $1) => $1.toUpperCase());\n};\n\nexport const kebab2Pascal = (s: string) => firstUpperCase(trueKebab2Camel(s));\n\nexport function startsWithUpperCase(str: string): boolean {\n return /^[A-Z]/.test(str);\n}\n\nexport function isNotEmptyString(value: string | undefined | null): value is string {\n return isNotNil(value) && value !== '';\n}\n\nexport function capitalizeFirstLetter (str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}","/**\n * NASL 插件\n */\nexport interface NASLPlugin<Functions extends {} = {}> {\n name: string;\n functions: Functions;\n}\n/**\n * 使用简单方法构建插件\n *\n * @deprecated 请使用基于inversify的依赖注入方式开发插件\n */\nexport function makePlugin<Functions extends {}>({\n name,\n functions,\n}: NASLPlugin<Functions>) {\n const plugin = {\n name,\n functions,\n };\n return plugin;\n}\n","import { BindStyle, Identifier, Param } from '@lcap/nasl-concepts';\nimport { isBindStyle } from '@lcap/nasl-concepts/asserts';\nimport { escape } from 'html-escaper';\nimport { inject, injectable, multiInject, optional } from 'inversify';\nimport { flatten, isObject, isString, uniq } from 'lodash';\nimport { GeneratorInfrastructureDomain, JavaScriptDomain } from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { isLocalIndividualStateIRComponentRef } from '../../types';\nimport {\n BindAttributeIR,\n BindDirectiveIR,\n BindEventIR,\n ComponentInstanceIR,\n ExprIR,\n GeneralComponentIR,\n NASLAppIR,\n ReferencedComponent,\n ViewComponentIR,\n} from '../../types/ir';\nimport { assertNever, notImplemented } from '../../utils/assert';\nimport { isComponentFromLib } from '../../utils/component';\nimport { jsonStringifyKeepUndefined } from '../../utils/json';\nimport { Logger } from '../../utils/logger';\nimport { FolderPath, folderPathToString } from '../../utils/path';\nimport { isNotEmptyString, kebab2Pascal, trueKebab2Camel } from '../../utils/str';\nimport { isNotNil } from '../../utils/types';\nimport { apiClientPlugin } from '../api-client-plugin';\nimport { StateContextIR, inferChangeEventNameFromAttrName } from '../ir-builder-plugin';\nimport { JSXNode, styleStringToInlineObject } from '../language/jsx-codegen-plugin';\nimport { codeFormatPlugin } from '../misc/code-format-plugin';\nimport { i18nPlugin } from '../misc/i18n-plugin';\nimport { PlatformConfig } from '../misc/metadata-plugin';\nimport { OrganizedFile } from '../misc/project-organization-plugin';\nimport { routesExtractionPlugin } from '../misc/routes-extraction-plugin';\nimport { reactComponentLibHackPlugin } from './react-component-lib-hack-plugin';\nimport { reactRouterPlugin } from './react-router-plugin';\n\nconst logger = Logger('react codegen');\n\n/**\n * 各类React Hooks\n */\nexport type ReactHook =\n | {\n /**\n * ReactHook的种类\n */\n kind: 'useEffect';\n /**\n * 函数体\n */\n body: string;\n /**\n * deps 数组\n */\n deps: ExprIR[];\n }\n | {\n kind: 'useCallback';\n /**\n * 所声明的变量名字\n * @example\n *\n * ```\n * \"handleClick\"\n * ```\n */\n declaration: string;\n /**\n * deps数组\n */\n deps: ExprIR[];\n /**\n * 函数体\n */\n body: string;\n }\n | {\n kind: 'useState';\n /**\n * 声明的变量名字\n */\n declarations: [] | [string] | [string, string];\n /**\n * 初始值\n */\n initial: ExprIR | undefined;\n }\n | {\n /**\n * 完全自定义的Hook\n */\n kind: 'free';\n /**\n * 调用这个hook的代码\n *\n * @example\n * ```\n * `const localStore = useLocalObservable(()=>{\n return {};\n })`\n * ```\n */\n code: string;\n /**\n * 此 hook 需要的import\n */\n import?: ImportIR;\n /**\n * 声明的变量\n */\n declarations: string[];\n };\n\n/**\n * @deprecated\n * @param c\n * @returns\n */\nexport function getComponentName(c: GeneralComponentIR | ComponentInstanceIR): string {\n const name = isComponentInstanceIR(c) ? c.name : c.identifier;\n return kebab2Pascal(name);\n}\n\nfunction isComponentInstanceIR(\n x: GeneralComponentIR | ComponentInstanceIR\n): x is ComponentInstanceIR {\n return x.kind === 'component-instance';\n}\n\n/**\n * React 逻辑片段输出为JSX时可以控制的选项\n */\nexport type ToJSXOption = { rootAsFragment?: boolean; shallow?: boolean };\n\n/**\n * React 中子属性的属性名\n */\nexport const ReactChildrenPropName = 'children';\n\n/**\n * @internal\n */\ntype ValuePayload = {\n kind: 'string' | 'expr';\n payload: string;\n};\n\n/**\n * React 逻辑片段构造时可用的选项\n */\ntype ReactFragmentOption = Partial<Pick<ComponentInstanceIR, 'slot'>> & {\n /**\n * 混淆之后的名字\n *\n * 若不传此选项则不混淆名字\n */\n mangledName?: string;\n} & (\n | {\n kind?: 'view';\n }\n | {\n kind: 'biz-component';\n /**\n * 业务组件参数\n */\n params?: Param[];\n }\n );\n\n/**\n * 文件片段\n *\n * @public\n */\nexport interface FileFragment {\n /**\n * 将文件片段转换为代码\n *\n * @returns 代码字符串\n */\n toCode: () => {\n code: string;\n };\n /**\n * 获取Import\n *\n * @returns 此文件片段需要的所有Import\n */\n getImports: () => ImportIR[];\n}\n\n/**\n * React 组件片段的表示\n *\n * 描述了React组件的一个局部逻辑及其视图,包括:\n * - 逻辑:所依赖的import、所使用的Hooks、所包含的指令、所绑定的属性和事件等。\n * - 调用{@link bindAttr}、{@link bindEvent}等方法,可以往片段中绑定属性和事件处理器。\n * - 调用{@link bindDirective}等方法,可以设置显隐等。\n * - 视图:其标签名与JSX形式等。\n * - 调用{@link toJsx}方法,会根据内部维护的属性和指令将片段格式化为JSX。例如,如果设置了if指令,则会将`<Tag></Tag>`输出为`(flag ? <Tag></Tag> : undefined)`\n *\n * 通过组合多个组件片段表示,可以得到一个完整的组件。\n *\n * @public\n */\nexport class ReactFragment implements FileFragment {\n constructor(\n /**\n * 标签名\n */\n private name: string,\n /**\n * 依赖的 Import 列表\n */\n public imports: ImportIR[],\n /**\n * 此逻辑片段所依赖的 Hooks\n */\n public hooks: ReactHook[],\n /**\n * 子级逻辑片段\n */\n public children: ReactFragment[],\n /**\n * 状态上下文\n */\n private ctx: StateContextIR,\n private reactCodegenPlugin: ReactCodegenPlugin,\n /**\n * 其他控制选项\n */\n private options?: ReactFragmentOption\n ) {}\n private attrMap: Map<string, ValuePayload> = new Map();\n\n private directives: Map<BindDirectiveIR['kind'], BindDirectiveIR> = new Map();\n\n getImports() {\n return uniq(\n [\n ...this.imports,\n ...this.hooks.map((x) => {\n if (x.kind === 'free') {\n return x.import;\n } else {\n return {\n from: 'react',\n import: `{${x.kind}\\}`,\n };\n }\n }),\n {\n import: '{ observer, Observer }',\n from: 'mobx-react-lite',\n },\n {\n from: 'mobx',\n import: '{ toJS, autorun }',\n },\n ].filter(isNotNil)\n );\n }\n getHooks() {\n return this.hooks;\n }\n private getAttrMapStr(): string {\n const escapedKV: { key: string; value: string }[] = [];\n for (const [k, v] of this.attrMap) {\n if (k !== ReactChildrenPropName) {\n const getAttrValueStr = () => {\n if (v.kind === 'expr') {\n return `{${v.payload}\\}`;\n } else {\n const s = v.payload;\n if (s.includes(`\"`)) {\n return `{${JSON.stringify(s)}}`;\n }\n return `${JSON.stringify(s)}`;\n }\n };\n escapedKV.push({ key: trueKebab2Camel(k), value: getAttrValueStr() });\n }\n }\n\n return escapedKV\n .map(({ key, value }) => {\n return ` ${key}=${value}`;\n })\n .join('');\n }\n\n /**\n * 获取混淆之后的名字\n *\n * @returns 若没有指定混淆后的名字,则返回原名\n */\n getMangledName() {\n return this.options?.mangledName ?? this.name;\n }\n\n isIdeSlot() {\n return this.name === 'IdeSlot';\n }\n\n /**\n * 转换为JSX\n * @param option - 转JSX的选项\n * @returns JSX\n */\n toJsx(option?: ToJSXOption): JSXNode {\n const attrMapStr = this.getAttrMapStr();\n const tag = option?.rootAsFragment ? '' : this.name;\n const getBody = () => {\n const getChildrenStr = () => {\n const childrenInAttr = this.attrMap.get(ReactChildrenPropName);\n if (childrenInAttr) {\n if (childrenInAttr.kind === 'string') {\n return escapeTagInnerText(childrenInAttr.payload);\n }\n return `{${childrenInAttr.payload}}`;\n }\n const children = option?.shallow\n ? ''\n : this.children.map((x) => x.toJsx({ rootAsFragment: x.isIdeSlot() })).join('\\n') ?? '';\n return children;\n\n function escapeTagInnerText(text: string) {\n // replace { and } with {'{'} and {'}'}\n return escape(text).replace(/({|})/g, (match, p1) => {\n return `{'${p1}'}`;\n });\n }\n };\n const children = getChildrenStr();\n const bodyStr = getBodyStr();\n // 约定若param非空的时候,就渲染为()=>...的形式\n if (this.options?.slot) {\n const param = this.options?.slot.scope;\n if (this.options?.slot.target && !!param) {\n const wrapWithObserver = (x: string) => {\n return `<Observer>{()=>(${x})}</Observer>`;\n };\n // render as function\n // TODO wudengke 统一的 print 方法\n return { body: `(${param}: any) => ${wrapWithObserver(bodyStr)}` };\n }\n }\n return { body: bodyStr };\n function getBodyStr() {\n if (tag) {\n return `<${tag}${attrMapStr}>${children}</${tag}>`;\n } else {\n return `<>${children}</>`;\n }\n }\n };\n const { body } = getBody();\n const ifDirective = this.directives.get('if');\n if (ifDirective) {\n const expr = this.ctx.resolveExprToString(\n ifDirective.expression.expr,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx)\n );\n return `{(${expr}) ? (${body}) : undefined}`;\n }\n return body;\n }\n // TODO 后面移动到 mobx 插件的 makeLocalIndividualHooks 函数中来生成\n genUpdateParamsHooks() {\n if (this.options?.kind === 'biz-component') {\n const params = this.options.params ?? [];\n if (!params.length) return;\n this.hooks.push({\n kind: 'useEffect',\n body: `() => {\n ${params.map((item) => `localStore.${item.name} = props.${item.name}`).join(';\\n')}\n }`,\n deps: [\n {\n expr: new Identifier({ name: 'props' }),\n },\n ],\n });\n\n this.hooks.push({\n kind: 'useEffect',\n body: `() => {\n ${params\n .map(\n (item, i) =>\n `const disposer${i + 1} = autorun(()=>{\n props.${trueKebab2Camel(\n `on-${inferChangeEventNameFromAttrName(item.name)}`\n )}?.(localStore.${item.name});\n });`\n )\n .join(';\\n')}\n return ()=>{\n ${params.map((_, i) => `disposer${i + 1}();\\n`).join(';\\n')}\n }\n }`,\n deps: [],\n });\n }\n }\n\n /**\n * 转换为函数组件的变量声明\n * @returns 函数组件的变量声明\n */\n private toFunctionComponentVariable() {\n const name = this.getMangledName();\n const jsx = this.toJsx({\n // 将根替换为fragment\n rootAsFragment: true,\n });\n this.genUpdateParamsHooks();\n const serializeReactHook = (hook: ReactHook): string => {\n switch (hook.kind) {\n case 'useCallback': {\n let body = hook.body;\n return `const ${hook.declaration} = useCallback(${body}, [${hook.deps\n .map((item) =>\n this.ctx.resolveExprToString(\n item.expr,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx)\n )\n )\n .join(',')}])`;\n }\n case 'useState':\n return `const [${hook.declarations.join(',')}] = useState(${hook.initial})`;\n case 'useEffect':\n return `useEffect(${hook.body}, [${hook.deps\n .map((item) =>\n this.ctx.resolveExprToString(\n item.expr,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx)\n )\n )\n .join(',')}])`;\n case 'free':\n return `${hook.code}`;\n default:\n notImplemented(hook);\n }\n };\n const imports: ImportIR[] = uniq([...this.getImports()]).filter(isNotNil);\n if (this.options?.kind === 'biz-component') {\n const componentStr = `const ${name}: FC = observer(forwardRef((props, ref) => {\n ${this.hooks.map(serializeReactHook).join(';\\n')}\n return (${jsx});\n }));`;\n this.imports.push({\n from: 'react',\n import: '{ forwardRef }',\n });\n return { componentStr, imports };\n } else {\n const componentStr = `const ${name}: FC = observer(function ${name}(props, ref) {\n ${this.hooks.map(serializeReactHook).join(';\\n')}\n return (${jsx});\n }, {forwardRef: true});`;\n return { componentStr, imports };\n }\n }\n\n toCode() {\n const { componentStr, imports } = this.toFunctionComponentVariable();\n return { code: componentStr, imports };\n }\n\n /**\n * 从组件声明生成React逻辑片段\n * @param c - 组件声明\n * @returns 生成的React逻辑片段。至少生成一个逻辑片段\n */\n static fromComponentIR(\n c: GeneralComponentIR,\n reactCodegen: ReactCodegenPlugin,\n options?: { mangledName?: string }\n ): ReactFragment {\n const componentName = getComponentName(c);\n\n const children = c.elements.map((x) => reactCodegen.genReactFragment(x, c.stateContext));\n const ownHooks = reactCodegen.reactStateManager.produceHooks(c.stateContext);\n\n const mangledName = options?.mangledName ?? `__${componentName}`;\n\n if (c.kind === 'biz-component') {\n return new ReactFragment(\n componentName,\n [...children.flatMap((x) => x.getImports())],\n [...ownHooks, ...children.flatMap((x) => x.getHooks())],\n children,\n c.stateContext,\n reactCodegen,\n { mangledName, kind: c.kind, params: c.__raw.params }\n );\n }\n\n return new ReactFragment(\n componentName,\n [...children.flatMap((x) => x.getImports())],\n [...ownHooks, ...children.flatMap((x) => x.getHooks())],\n children,\n c.stateContext,\n reactCodegen,\n { mangledName }\n );\n }\n\n /**\n * 启发式地将大组件拆分为若干个小组件\n * @param c\n * @param reactCodegen\n * @returns\n */\n static fromComponentIRIntoHeuristicallySplitFragments(\n c: GeneralComponentIR,\n reactCodegen: ReactCodegenPlugin,\n options?: {\n enabled?: boolean;\n /**\n * 拆分大小\n */\n sizeThreshold?: number;\n }\n ): { main: ReactFragment; subs: ReactFragment[] } {\n const threshold = options?.sizeThreshold ?? 1;\n const sizeMap = new WeakMap<NodeIROfInterest, number>();\n\n type NodeIROfInterest = GeneralComponentIR | ComponentInstanceIR;\n function getChildren(node: NodeIROfInterest) {\n if ('elements' in node) {\n return node.elements;\n }\n const children = node.children;\n return children;\n }\n const sizing = (node: NodeIROfInterest | ComponentInstanceIR): number => {\n const value = sizeMap.get(node);\n if (isNotNil(value)) {\n return value;\n }\n let subTreeSize = 1;\n for (const child of getChildren(node)) {\n subTreeSize += sizing(child);\n }\n sizeMap.set(node, subTreeSize);\n return subTreeSize;\n };\n type ComponentInstanceIRAfterSplit = ComponentInstanceIR & { __split__: undefined };\n const subs: ComponentInstanceIR[] = [];\n const split = <T extends NodeIROfInterest>(node: T): { main: T } => {\n const children = getChildren(node);\n const { keepThisLevel, shouldSplit } = smartStrategy(node);\n function defaultStrategy(node: NodeIROfInterest) {\n // 什么都不做\n return {\n keepThisLevel: true,\n shouldSplit: false,\n };\n }\n function smartStrategy(node: NodeIROfInterest) {\n // 进行启发式拆分\n function shouldKeepThisLevel() {\n if (node.kind === 'component-instance') {\n // TODO 读取组件库定义的不可拆分的父子元素关系\n if (\n node.component.kind === 'library' &&\n [\n 'BrTable',\n 'Table',\n 'BrTabs',\n 'Tabs',\n 'Form',\n 'BrForm',\n 'BrFormItem',\n 'FormItem',\n ].includes(node.component.tag)\n ) {\n // 因为这些元素的直接节点不能进行拆分,需要拆分他们的子节点\n return true;\n }\n }\n return false;\n }\n\n function shouldSplit() {\n return sizing(node) >= threshold;\n }\n return { keepThisLevel: shouldKeepThisLevel(), shouldSplit: shouldSplit() };\n }\n if (shouldSplit) {\n const newChildren = children.map((child) => {\n const { main } = split(child);\n if (!keepThisLevel) {\n subs.push(child);\n const newMain = nodeToSplitComponentInstanceIR(main);\n return newMain;\n }\n return main;\n });\n if (isComponentInstanceIR(node)) {\n node.children = newChildren;\n } else {\n node.elements = newChildren;\n }\n }\n return { main: node };\n };\n let main = c;\n if (options?.enabled) {\n logger.info(`开始启发式拆分${c.kind}组件:${c.identifier}`);\n let result = split(c);\n main = result.main;\n logger.info(`得到${subs.length}个子组件`);\n }\n // 如果没有$refs或者localStore就补充\n const componentRefStates = main.stateContext.providedStates.filter(\n isLocalIndividualStateIRComponentRef\n );\n if (componentRefStates.length === 0) {\n // 若不存在Refs,则需要补充一个空的状态 const $refs = null;\n main.stateContext.provide({\n identifier: '$refs',\n kind: 'standalone',\n typeAnnotation: null,\n initialization: {\n kind: 'variable',\n left: '$refs',\n right: 'null',\n },\n });\n }\n return {\n // 将主组件命名为固定的\"MainComponent\"\n main: ReactFragment.fromComponentIR(main, reactCodegen, { mangledName: 'MainComponent' }),\n subs: subs.map((sub) => {\n return ReactFragment.fromComponentIR(\n nodeToSplitComponentIR(sub, c.stateContext),\n reactCodegen\n );\n }),\n };\n\n function deriveContextForSubComponent(ctx: StateContextIR) {\n // 提供 $refs和localStore两个变量\n return StateContextIR.fromParent(ctx)\n .provide({\n /**\n * const $refs = ref;\n */\n identifier: '$refs',\n kind: 'standalone',\n typeAnnotation: null,\n initialization: {\n kind: 'variable',\n left: '$refs',\n right: 'ref',\n },\n })\n .provide({\n /**\n * const localStore = props.localStore;\n */\n identifier: 'localStore',\n kind: 'standalone',\n typeAnnotation: null,\n initialization: {\n kind: 'variable',\n left: 'localStore',\n right: 'props.localStore',\n },\n });\n }\n function nodeToSplitComponentIR(\n originalComponentInstanceIR: ComponentInstanceIR,\n ctx: StateContextIR\n ): ViewComponentIR {\n const stateContext = deriveContextForSubComponent(ctx);\n return {\n kind: 'view',\n __raw:\n // @ts-expect-error\n null as View,\n childComponents: [],\n elements: [originalComponentInstanceIR],\n identifier: originalComponentInstanceIR.name,\n stateContext,\n };\n }\n\n function nodeToSplitComponentInstanceIR(node: NodeIROfInterest): ComponentInstanceIRAfterSplit {\n if (isComponentInstanceIR(node)) {\n // 页面元素变成指向抽成组件的页面元素\n // 去掉上面所有的属性,并加上: localStore 和 $refs\n return {\n __split__: undefined,\n name: node.name,\n kind: 'component-instance',\n attrs: [\n {\n kind: 'expr',\n // @ts-expect-error\n __raw: { type: 'dynamic', name: 'localStore', concept: 'BindAttribute' },\n expression: {\n expr: new Identifier({ name: 'localStore' }),\n },\n name: 'localStore',\n sync: false,\n concept: 'BindAttribute',\n },\n {\n kind: 'expr',\n // @ts-expect-error\n __raw: { type: 'dynamic', name: 'ref', concept: 'BindAttribute' },\n expression: {\n expr: new Identifier({ name: '$refs' }),\n },\n name: 'ref',\n sync: false,\n concept: 'BindAttribute',\n },\n ],\n children: [],\n component: createReferencedForSubComponent(node),\n directives: [],\n events: [],\n slot: { target: undefined, scope: undefined },\n };\n } else {\n notImplemented('nodeToSplitComponentInstanceIR中输入非ComponentInstanceIR的情形');\n }\n function createReferencedForSubComponent(sub: ComponentInstanceIR): ReferencedComponent {\n const componentName = `__${getComponentName(sub)}`;\n return {\n kind: 'sub-component',\n tag: componentName,\n };\n }\n }\n }\n\n /**\n * 绑定事件\n * @param b - 绑定事件的IR\n */\n bindEvent(b: BindEventIR, options?: { handlerPrefix: string }): void {\n // 约定:React组件的dataSource没有on-前缀\n // FIXME wudengke 确认这里的写法\n const attrPrefix = options?.handlerPrefix ?? b.__raw.name === 'dataSource' ? '' : 'on-';\n /**\n * @example change\n */\n const targetAttr = b.__raw.name;\n /**\n * @example on-change\n */\n const finalAttrName = `${attrPrefix}${targetAttr}`;\n const resolver = this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx);\n const storeHandlerName = resolver.resolveIdentifier(new Identifier({ name: b.handlerName }));\n if (!storeHandlerName) {\n throw new Error('cannot find event handler');\n }\n const params = b.params;\n const eventParam = params.at(0);\n if (params.length > 1 && eventParam) {\n const args = params.map((x) => x.name).join(',');\n this.attrMap.set(finalAttrName, {\n kind: 'expr',\n payload: `(${eventParam.name}) => ${storeHandlerName}(${args})`,\n });\n } else {\n this.attrMap.set(finalAttrName, {\n kind: 'expr',\n payload: storeHandlerName,\n });\n }\n }\n\n /**\n * 将属性存入当前片段的attrMap\n *\n * @param b - 绑定属性的IR\n */\n bindAttr(b: BindAttributeIR) {\n // TODO wudengke 去掉对.__raw的直接使用\n switch (b.kind) {\n case 'expr': {\n if (b.__raw.type === 'string') {\n this.attrMap.set(b.__raw.name, {\n kind: 'string',\n payload: String(b.__raw.value),\n });\n } else if (b.__raw.type === 'dynamic') {\n if (b.expression.expr) {\n const newBind = reactComponentLibHackPlugin.functions.hackBindAttribute(b);\n const payload = this.ctx.resolveExprToString(\n newBind.expression.expr,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx)\n );\n this.attrMap.set(b.__raw.name, {\n kind: 'expr',\n payload,\n });\n } else {\n const errorMsg = `${b.__raw.nodePath}@${b.__raw.concept} 的expression 为空`;\n logger.debug(errorMsg);\n return;\n }\n } else if (b.__raw.type === 'static') {\n // static的children按照字符串展示\n if (b.__raw.name === 'children') {\n this.attrMap.set(b.__raw.name, {\n kind: 'string',\n payload: String(b.__raw.value),\n });\n return;\n }\n if (isNotEmptyString(b.__raw.value as string)) {\n this.attrMap.set(b.__raw.name, {\n kind: 'expr',\n payload: String(b.__raw.value),\n });\n }\n }\n return;\n }\n case 'render': {\n const frag = this.reactCodegenPlugin.genReactFragment(b.component, this.ctx);\n const payload = frag.toJsx();\n this.imports.push(...frag.getImports());\n this.attrMap.set(b.name, {\n kind: 'expr',\n payload,\n });\n return;\n }\n case 'validation-rules': {\n const ruleStrs = b.rules.map((r) => {\n return this.ctx.resolveExprToString(\n r,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx)\n );\n });\n this.attrMap.set(b.name, {\n kind: 'expr',\n payload: `[${ruleStrs.join(', ')}]`,\n });\n return;\n }\n default: {\n assertNever(b);\n }\n }\n }\n\n /**\n * 设置绑定样式和静态样式\n * @param styles - 需绑定样式节点列表\n * @param staticStyle - 静态样式字符串\n * @returns\n */\n setStyleAndStaticStyle(styles: BindStyle[], staticStyle: string) {\n if (styles.length === 0 && !staticStyle) {\n return;\n }\n // 要求:BindStyle的优先级比手动指定的StaticStyle高\n const staticStyleObject = styleStringToInlineObject(staticStyle);\n styles.forEach((b) => {\n if (!b.name) {\n throw new Error(b.nodePath);\n }\n if (b.expression) {\n staticStyleObject[b.name] = b;\n if (!isBindStyle(b)) {\n throw new Error(`${b} is not bindStyle`);\n }\n }\n });\n const that = this;\n\n function cssPropertyNameToReactStyleObjectKey(cssProperty: string) {\n return cssProperty.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());\n }\n\n type KeyValuePayload = ValuePayload & { key: string };\n const property = Object.entries(staticStyleObject)\n .map(([key, v]): KeyValuePayload | undefined => {\n if (isObject(v) && isBindStyle(v)) {\n const reactObjectKey = cssPropertyNameToReactStyleObjectKey(key);\n const value = that.ctx.resolveExprToString(\n v.expression!,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(that.ctx)\n );\n // TODO wudengke Vue使用的是endsWith\n if (reactObjectKey === 'backgroundImage') {\n return { kind: 'expr', payload: `\\`url(\\${${value}})\\``, key: reactObjectKey };\n }\n return { kind: 'expr', payload: value, key: reactObjectKey };\n } else if (isString(v)) {\n return { kind: 'string', payload: v, key: key };\n }\n return undefined;\n })\n .filter(isNotNil);\n function formatValuePayloadAsObjectStr(properties: KeyValuePayload[]): ValuePayload {\n const body = properties\n .map((x) => {\n let value = getValue();\n return `${JSON.stringify(x.key)}: ${value}`;\n function getValue() {\n if (x.kind === 'expr') {\n return x.payload;\n } else {\n return `${JSON.stringify(x.payload)}`;\n }\n }\n })\n .join(',\\n');\n return { kind: 'expr', payload: `{${body}}` };\n }\n\n this.attrMap.set('style', formatValuePayloadAsObjectStr(property));\n }\n\n /**\n * 绑定指令\n * @param b - 绑定指令的IR\n */\n bindDirective(b: BindDirectiveIR) {\n this.directives.set(b.kind, b);\n }\n}\n\ntype ImportFromRepr = string;\ntype ImportWhatRepr = string;\nexport type ImportIR =\n | {\n from: ImportFromRepr;\n import: ImportWhatRepr;\n lazy?: boolean;\n }\n | {\n from: ImportFromRepr;\n import?: undefined;\n };\n\n/**\n * 导出语句\n *\n * @internal\n */\ntype ExportStatement = string;\n\n/**\n * ImportIR的Resolve函数\n *\n * 将一个ImportIR解析为具体的Import语句\n */\nexport type ImportIRResolver = (importIR: ImportIR) => string;\n\nexport class ReactFileDescription {\n constructor(\n public fileName: string,\n public imports: ImportIR[],\n private body: FileFragment[],\n private exports: ExportStatement[],\n public folder?: FolderPath\n ) {}\n get fileNameWithExt(): string {\n return this.fileName.includes('.') ? this.fileName : `${this.fileName}.tsx`;\n }\n\n getFolderPath(): string | undefined {\n if (this.folder) {\n return folderPathToString(this.folder);\n }\n return undefined;\n }\n getImports(): ImportIR[] {\n return [...this.imports, ...this.body.flatMap((x) => x.getImports())].filter(isNotNil);\n }\n\n /**\n * 将文件描述序列化为字符串\n * @param importResolver - import 解析函数\n * @returns 序列化后的字符串\n */\n async serialize(importResolver: ImportIRResolver): Promise<string> {\n const exports = this.exports;\n const components = this.body.map((x) => {\n return x.toCode();\n });\n const imports: ImportIR[] = this.getImports();\n const resolvedImports = imports.map(importResolver);\n const parts = [\n uniq(resolvedImports).join('\\n'),\n components.map((x) => x.code).join('\\n'),\n uniq(exports).join('\\n'),\n ];\n const str = parts.join('\\n');\n const formatted = await codeFormatPlugin.functions.format(str, this.fileNameWithExt);\n if (this.fileNameWithExt.endsWith('.tsx')) {\n return `//@ts-nocheck\\n${formatted}`;\n }\n return formatted;\n }\n /**\n * 将另外一个文件描述合并到当前文件描述(修改当前文件描述)\n * @param other - 另一个文件描述\n * @returns 合并后的当前文件描述\n */\n merge(other: ReactFileDescription | undefined): this {\n if (!other) {\n return this;\n }\n this.imports.push(...other.imports);\n this.body.push(...other.body);\n this.exports.push(...other.exports);\n return this;\n }\n static empty(name?: string) {\n return new ReactFileDescription(name ?? 'NoName', [], [], []);\n }\n}\n\nexport const FileDescription = ReactFileDescription;\n\n/**\n * 根据组件调用计算组件标签名\n * @param c - 组件调用\n * @returns 组件标签名\n *\n * @internal\n */\nfunction getReactComponentName(c: ComponentInstanceIR) {\n if (isComponentFromLib(c.component)) {\n if (c.component.tag === 'template') {\n return '';\n }\n }\n return c.component.tag;\n}\n\n/**\n * 组件声明到文件路径的映射字典\n */\nexport type ComponentIRToPathDict = WeakMap<GeneralComponentIR, string>;\n\n/**\n * React 代码生成插件\n */\n@injectable()\nexport class ReactCodegenPlugin\n implements JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactCodegen\n{\n constructor(\n @inject(ServiceMetaKind.ReactJavaScriptCodePrinter)\n public javaScriptCodegen: JavaScriptDomain.JavaScriptCodegen,\n @inject(ServiceMetaKind.ReactStateManager)\n public reactStateManager: JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactStateManager,\n @inject(ServiceMetaKind.FrontendPerformance)\n public frontendPerformance: JavaScriptDomain.FrontendApplicationDomain.FrontendPerformance,\n @inject(ServiceMetaKind.ProjectOrganizer)\n private projectOrganizer: GeneratorInfrastructureDomain.ProjectOrganizer,\n @inject(ServiceMetaKind.EntryPointManager)\n private entrypointManager: JavaScriptDomain.FrontendApplicationDomain.EntrypointManager,\n @multiInject(ServiceMetaKind.ReactHookProvider)\n @optional()\n private reactHookProviders?: JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactHookProvider[]\n ) {}\n\n genReactFragment(c: ComponentInstanceIR, ctx: StateContextIR): ReactFragment {\n const imports: ImportIR[] = [\n {\n from: 'react',\n import: 'React',\n },\n {\n from: 'react',\n import: '{type FC}',\n },\n ];\n const hooks: ReactHook[] = [];\n const childrenFrags = c.children.map((x) => {\n return this.genReactFragment(x, ctx);\n });\n childrenFrags.forEach((c) => {\n hooks.push(...c.getHooks());\n imports.push(...c.getImports());\n });\n const componentName = getReactComponentName(c);\n const frag = new ReactFragment(componentName, imports, hooks, childrenFrags, ctx, this, {\n slot: c.slot,\n });\n const possibleIr = createImportIrFromReferencedComponent(c.component);\n if (possibleIr) {\n imports.push(possibleIr);\n }\n if (c.__raw) {\n frag.setStyleAndStaticStyle(c.__raw.bindStyles ?? [], c.__raw.staticStyle ?? '');\n }\n for (const b of c.events) {\n frag.bindEvent(b);\n }\n for (const b of c.attrs) {\n frag.bindAttr(b);\n }\n for (const b of c.directives) {\n frag.bindDirective(b);\n }\n return frag;\n }\n /**\n * 根据组件声明信息和文件夹信息生成React组件\n * @param c - 组件声明信息\n * @param folder - 文件夹信息\n * @returns 生成的多个React文件\n */\n genReactComponent(\n c: GeneralComponentIR,\n folder?: FolderPath,\n irConfig?: NASLAppIR['configs']\n ): ReactFileDescription[] {\n const { main, subs } = ReactFragment.fromComponentIRIntoHeuristicallySplitFragments(\n c,\n this,\n irConfig?.config?.extensionConfigMap?.heuristicalSplit\n );\n const components = [...subs, main];\n const imports = components.flatMap((x) => x.getImports()).filter(isNotNil);\n const componentName = getComponentName(c);\n const reactFile = new ReactFileDescription(\n componentName,\n uniq(imports),\n components,\n [`export default ${main.getMangledName()}`],\n folder\n );\n return [reactFile];\n }\n /**\n * 递归生成React组件的文件\n * @param c - 组件声明\n * @param dict - 组件声明到文件路径的映射字典\n * @param folder - 此文件所属的父文件夹\n * @returns 生成的React文件描述列表\n */\n recursivelyGenReactComponent(\n c: GeneralComponentIR,\n dict: ComponentIRToPathDict,\n folder?: FolderPath,\n irConfig?: NASLAppIR['configs']\n ): ReactFileDescription[] {\n dict.set(c, folder ? folderPathToString(folder) : '/');\n return flatten([\n this.genReactComponent(c, folder, irConfig),\n c.kind === 'view'\n ? c.childComponents.flatMap((child) => {\n return this.recursivelyGenReactComponent(\n child,\n dict,\n [...(folder ?? []), { name: c.identifier }],\n irConfig\n );\n })\n : [],\n ]);\n }\n buildRoutes(views: ViewComponentIR[], componentIRToPathDict: ComponentIRToPathDict, basePath: string) {\n const self = {\n ...routesExtractionPlugin.functions,\n ...reactRouterPlugin.functions,\n };\n const { routes: routeIRs } = self.extractRoute(views, basePath, {\n lazy: this.frontendPerformance?.performanceOptions?.lazy ?? true,\n frameworkKind: 'react',\n });\n const { code, imports } = self.routeToCode(routeIRs, componentIRToPathDict, basePath);\n return new ReactFileDescription('Router', [...imports], [], [code]);\n }\n /**\n * 构建平台配置文件\n * @param ir - NASL应用中间表示\n * @returns 平台配置文件描述\n */\n buildPlatformConfig(ir: NASLAppIR) {\n const self = {\n ...routesExtractionPlugin.functions,\n };\n\n const basePath = ir.configs.basePlatformConfig.basePath + '/';\n const { authResourcePaths, baseResourcePaths } = self.extractRoute(ir.views, basePath, {\n lazy: false,\n frameworkKind: 'react',\n });\n const platformConfig: PlatformConfig = {\n ...ir.configs.basePlatformConfig,\n authResourcePaths,\n baseResourcePaths,\n };\n return new ReactFileDescription(\n 'platform.config.ts',\n [],\n [],\n [`export default ${jsonStringifyKeepUndefined(platformConfig)}`]\n );\n }\n buildInit(ir: NASLAppIR): ReactFileDescription {\n const documentIcon = ir.configs.document.icon;\n const documentIconSetterCode = documentIcon\n ? `\n {\n const link = document.createElement('link');\n link.rel = 'shortcut icon';\n link.href = \\`${ir.configs.document.icon}\\`;\n document.head.appendChild(link);\n }\n `\n : '';\n return new ReactFileDescription(\n 'init.ts',\n [\n {\n from: 'i18next',\n import: 'i18n',\n },\n {\n from: './index.css',\n },\n {\n from: './platform.config',\n import: 'platformConfig',\n },\n ],\n [],\n [\n `\n function init(){\n const appInfo = platformConfig.appConfig;\n Object.assign(appInfo, platformConfig);\n ${documentIconSetterCode}\n\n // 国际化\n let locale = 'zh-CN';\n if (appInfo.i18nInfo) {\n const { I18nList, messages } = appInfo.i18nInfo;\n locale = getUserLanguage(appInfo, messages);\n // 重置当前生效语言\n appInfo.i18nInfo.locale = locale;\n appInfo.i18nInfo.currentLocale = locale;\n // 设置当前语言名称\n appInfo.i18nInfo.localeName = I18nList?.find((item) => item.id === locale)?.name;\n }\n const i18nInfo = appInfo.i18nInfo;\n i18n\n .init({\n // 设置语言资源,可以根据需要引入其他语言文件\n resources: Object.keys(i18nInfo.messages).reduce((acc, key) => {\n acc[key] = {\n translation: i18nInfo.messages[key]\n };\n return acc;\n }, {}),\n lng: locale, // 默认语言\n fallbackLng: 'zh-CN', // 如果当前语言没有对应的翻译,将使用该语言作为备用\n interpolation: {\n escapeValue: false, // 不要对翻译的文本进行转义,以支持 HTML 标签\n },\n });\n window.$i18n = i18n;\n window.appInfo = appInfo;\n\n function getUserLanguage(appInfo, messages = {}) {\n let locale = localStorage.i18nLocale;\n // 如果local里没有就读主应用的默认语言\n if (!messages[locale]) {\n // 如果当前浏览器的设置也没有,就读取主应用的默认语言\n locale = navigator.language || navigator.userLanguage;\n\n if (!messages[locale]) {\n // 如果不在列表中,获取语言代码的前两位\n let baseLang = locale.substring(0, 2);\n const languageList = Object.keys(messages);\n // 查找列表中是否有与基础语言代码相同的项\n let match = languageList.find((lang) => lang.startsWith(baseLang));\n // 如果存在前两位一样的就用这个\n if (match) {\n locale = match;\n } else {\n // 如果不存在,就用默认语言\n locale = appInfo.i18nInfo.locale || 'zh-CN';\n }\n }\n }\n return locale;\n }\n }\n init();\n `,\n ]\n );\n }\n async buildMasterCss(themeCSS: string, packages: NASLAppIR['packages']) {\n const logger = Logger('buildMasterCss');\n logger.info(packages);\n const imports = packages.map((x) => {\n if (x.kind === 'standard') {\n return `@import './packages/${x.name}@${x.version}/dist-theme/index.css';`;\n }\n // TODO wudengke 可能并没有index.css,需要根据manifest确认\n return `@import './packages/extension/${x.name}@${x.version}/dist-theme/index.css';`;\n });\n return new ReactFileDescription('index.css', [], [], [...imports, themeCSS]);\n }\n /**\n * 构建前端全局变量文件\n * @param variables - 全局变量表示的列表\n * @param baseCtx - 状态上下文\n * @returns React文件描述\n */\n async buildGlobalFrontendVariableFile(\n variables: NASLAppIR['configs']['globalVariables'],\n baseCtx: StateContextIR\n ) {\n const classBodyStr = variables\n .map((v) => {\n const getInitExpr = (): string | undefined => {\n const defaultValueStr = v.defaultValue?.expression\n ? baseCtx.resolveExprToString(\n v.defaultValue.expression,\n this.javaScriptCodegen,\n this.reactStateManager.withCtx(baseCtx)\n )\n : undefined;\n if (v.localCache) {\n const initExpr = `loadFromLocalStorage(${key})`;\n if (defaultValueStr) {\n return `${initExpr} ?? ${defaultValueStr}`;\n }\n return initExpr;\n } else {\n if (defaultValueStr) {\n return defaultValueStr;\n }\n }\n return undefined;\n };\n const key = `${JSON.stringify(v.name)}`;\n const initExpr = getInitExpr();\n if (initExpr) {\n return `${v.name} = ${initExpr};`;\n } else {\n return `${v.name}: any;`;\n }\n })\n .join('\\n');\n const persistentKeysStr = JSON.stringify(\n variables.filter((x) => x.localCache).map((x) => x.name)\n );\n return new ReactFileDescription(\n 'global-variables.tsx',\n [\n { from: 'mobx', import: '{makeAutoObservable, observe}' },\n {\n from: './Hooks',\n import: '{genInitFromSchema, nasl}',\n },\n ],\n [],\n [\n `\n const loadFromLocalStorage = (key: string)=> {\n const value = globalThis.localStorage[key];\n try {\n return JSON.parse(value);\n } catch (error) {\n return undefined;\n }\n };\n const saveToLocalStorage = (key: string, value: unknown)=>{\n try {\n const str = JSON.stringify(value);\n localStorage[key] = str;\n } catch (error) {\n console.error('An error occurred:', error);\n }\n }\n `,\n `\n class GlobalVariables {\n ${classBodyStr}\n constructor() {\n makeAutoObservable(this);\n }\n }\n export const globalVariables = new GlobalVariables();\n export const useFrontendVariables = () => globalVariables;\n `,\n `\n const persistentKeys = ${persistentKeysStr};\n const disposer = observe(globalVariables, change => {\n const key = change.name;\n if(persistentKeys.includes(key)){\n const value = change.object[change.name];\n saveToLocalStorage(key, value);\n }\n });\n `,\n ]\n );\n }\n buildLibraryHook(packages: NASLAppIR['packages']) {\n const exts = packages.filter((x) => x.kind === 'extension');\n const imports: ImportIR[] = exts\n .map((ext) => {\n return {\n from: `@extension/${ext.name}`,\n import: `* as ${kebab2Pascal(ext.name)}`,\n };\n })\n .filter(isNotNil);\n return new ReactFileDescription(\n '',\n [...imports],\n [],\n [\n `export const useLibrary = ()=>{\n return {\n ${exts.map((ext) => {\n return `${ext.name}: ${kebab2Pascal(ext.name)}`;\n })}\n };\n }`,\n ]\n );\n }\n\n buildEntryFiles(ir: NASLAppIR) {\n const code = this.entrypointManager.generateEntry(ir);\n return code;\n }\n\n /**\n * 生成布局后的React源代码文件\n * @param ir - NASL应用中间表示\n * @param baseDir - 基目录\n * @returns 组织后的文件列表\n */\n async genFiles(ir: NASLAppIR, baseDir: string): Promise<OrganizedFile[]> {\n const utilHooks = ReactFileDescription.empty('Hooks')\n .merge(new ReactFileDescription('', [{ from: './init' }], [], []))\n .merge(reactRouterPlugin.functions.__hooksDefinitions())\n .merge(apiClientPlugin.functions.__hooksDefinitions())\n .merge(reactComponentLibHackPlugin.functions.__hooksDefinitions())\n .merge(i18nPlugin.functions.__hooksDefinitions())\n .merge(this.buildLibraryHook(ir.packages))\n .merge(new ReactFileDescription('', [], [], [`export {nasl, genInitFromSchema};`]));\n\n this.reactHookProviders?.forEach((reactHookProvider) => {\n utilHooks.merge(reactHookProvider.genHookDefinition());\n });\n const apiClientFile = apiClientPlugin.functions.buildApiStubFile(ir.apis, ir.configs.metaData);\n const componentIRToPathDict: ComponentIRToPathDict = new WeakMap();\n const views = ir.views.flatMap((x) =>\n this.recursivelyGenReactComponent(x, componentIRToPathDict, undefined, ir.configs)\n );\n const bizComponents = ir.bizComponents.flatMap((x) =>\n this.recursivelyGenReactComponent(x, componentIRToPathDict, undefined, ir.configs)\n );\n const basePath = ir.configs.basePlatformConfig.basePath + '/';\n const routes = this.buildRoutes(ir.views, componentIRToPathDict, basePath);\n const masterCss = await this.buildMasterCss(ir.configs.themeCSS, ir.packages);\n const globalVariables = await this.buildGlobalFrontendVariableFile(\n ir.configs.globalVariables,\n ir.baseCtx\n );\n\n const files = await this.projectOrganizer.organize({\n baseDir,\n project: {\n entry: this.buildEntryFiles(ir),\n api: apiClientFile,\n utils: utilHooks,\n routes,\n views,\n bizComponents,\n platformConfig: this.buildPlatformConfig(ir),\n init: this.buildInit(ir),\n masterCss,\n globalVariables,\n },\n });\n return files;\n }\n}\n\nfunction createImportIrFromReferencedComponent(c: ReferencedComponent): ImportIR | undefined {\n switch (c.kind) {\n case 'library': {\n return {\n from: `${c.libraryName}`,\n import: `{${c.tag}}`,\n };\n }\n case 'biz-component': {\n return {\n from: `${c.libraryName}`,\n import: `${c.tag}`,\n };\n }\n case 'sub-component': {\n // 子组件 目前只能从文件内引用\n return undefined;\n }\n default: {\n assertNever(c);\n }\n }\n}\n","// TODO 或许我们可以使用JSON5\nconst SomethingYouNeverGuessAsUndefinedPlaceholder = '__SomethingYouNeverGuessAsUndefinedPlaceholder__undefined__';\nexport function jsonStringifyKeepUndefined(obj: any) {\n return JSON.stringify(\n obj,\n (_k, v) => {\n return v === undefined ? SomethingYouNeverGuessAsUndefinedPlaceholder : v;\n },\n 2\n ).replaceAll(`\"${SomethingYouNeverGuessAsUndefinedPlaceholder}\"`, 'undefined');\n}\n","import { extname } from 'path';\n\nexport function hasExtension(filePath: string): boolean {\n const extension = extname(filePath);\n return extension !== '';\n}\n\nexport type Folder = {\n name: string;\n};\n\nexport type FolderPath = [Folder] | [Folder, ...Folder[]];\n\nexport function folderPathToString(folderTree: FolderPath): string {\n let root = '/';\n return root + folderTree.map((x) => x.name).join('/');\n}\n","import { LegacyMetaData, LogicIR } from '../types/ir';\nimport { makePlugin } from '../utils/plugin';\nimport { ReactFileDescription } from './react/react-codegen-plugin';\n\ntype ServiceConfig = {\n config: {\n serviceType: string;\n };\n url: {\n method: string;\n path: string;\n };\n};\n\nexport const apiClientPlugin = makePlugin({\n name: 'apiClientPlugin',\n functions: {\n buildApiStubFile(logics: LogicIR[], metaData: LegacyMetaData): ReactFileDescription {\n function apiSignaturesToServiceConfigMap(logics: LogicIR[]): Record<string, ServiceConfig> {\n const entries = logics.map((logic) => {\n return [logic.logic.name, logic.logic.toService()];\n });\n return Object.fromEntries(entries);\n }\n const logicsMap = Object.assign({}, metaData.logicsMap, apiSignaturesToServiceConfigMap(logics));\n return new ReactFileDescription(\n 'apis',\n [\n {\n from: '@lcap/basic-template',\n import: '{initLogic, initDataTypes, initService, initProcess, Global}',\n },\n ],\n [],\n [\n `export { genInitFromSchema } from '@lcap/basic-template';`,\n `export const dataTypesMap = ${JSON.stringify(metaData.dataTypesMap)};`,\n `export const enumsMap = ${JSON.stringify(metaData.enumsMap)};`,\n `export const servicesMap = ${JSON.stringify(metaData.servicesMap)};`,\n `const logicsMap = ${JSON.stringify(logicsMap)};`,\n `\n const {$global} = initDataTypes({dataTypesMap, i18nInfo: window.appInfo.i18nInfo});\n export const dataTypesGlobal = $global;\n window.$isInstanceOf = Global.prototype.$isInstanceOf;\n window.$isLooseEqualFn = Global.prototype.$isLooseEqualFn;\n window.$resolveRequestData = Global.prototype.$resolveRequestData;\n const { logics } = initLogic({logicsMap} as any);\n export const apiClient = logics;\n export const {services} = initService({servicesMap});\n initProcess();\n window.$processV2 = Global.prototype.$processV2;\n window.$systemProcessV2 = Global.prototype.$systemProcessV2;\n `,\n ]\n );\n },\n __hooksDefinitions(): ReactFileDescription {\n return new ReactFileDescription(\n 'ApiClientHooks',\n [\n {\n from: 'mobx',\n import: '{ makeAutoObservable, isObservable, observable }',\n },\n {\n from: '@lcap/basic-template',\n import: '{ isCreatedByGenInitFromSchema }',\n },\n {\n from: '/src/apis',\n import: '{ genInitFromSchema as baseGenInitFromSchema }',\n },\n {\n from: '/src/apis',\n import: '{ services }',\n },\n {\n from: 'lodash',\n import: '{cloneDeep}',\n },\n ],\n [],\n [\n `\nfunction deep(obj){\n if (isObservable(obj)) {\n return obj;\n }\n if (obj instanceof Array) {\n const newObj = obj.map(deep);\n return observable(newObj);\n } else if (isCreatedByGenInitFromSchema(obj)) {\n const newObj = Object.create(obj.__proto__);\n for (const key of Object.keys(obj)) {\n newObj[key] = deep(obj[key]);\n }\n return makeAutoObservable(newObj);\n } else if(obj instanceof Object){\n return makeAutoObservable(obj);\n }\n return obj;\n}\n\nexport const useGenInitFromSchema = (): typeof baseGenInitFromSchema => {\n return (...args) => {\n const obj = baseGenInitFromSchema(...args);\n return deep(obj);\n };\n};\nconst genInitFromSchema = useGenInitFromSchema();\n`,\n `\n export const useServices = ()=>{\n return services;\n }\n `,\n ]\n );\n },\n },\n});\n","import * as postcss from 'postcss';\nimport { makePlugin } from '../../utils/plugin';\n//@ts-expect-error 无类型定义\nimport postcssJs from 'postcss-js';\n\nexport type JSXNode = string;\ntype JSXRepr = string;\n\nexport function styleStringToInlineObject(staticStyle: string): Record<string, unknown> {\n try {\n const root = postcss.parse(staticStyle);\n return postcssJs.objectify(root);\n } catch (error) {\n return {};\n }\n}\n\nexport const jsxCodeGenPlugin = makePlugin({\n name: 'JsxCodeGen',\n functions: {\n printTag(tagName: string): JSXRepr {\n return `<${tagName} />`;\n },\n },\n});\n","import { format } from 'prettier/standalone';\nimport { makePlugin } from '../../utils/plugin';\n// @ts-ignore 没有类型定义\nimport parserTypeScript from 'prettier/parser-typescript';\nimport parserBabel from 'prettier/parser-babel';\nimport parserHtml from 'prettier/parser-html';\nimport { Logger } from '../../utils/logger';\n\nexport type PrettierOptions = NonNullable<Parameters<typeof format>[1]>;\n\nconst PrettierCommonOptions: PrettierOptions = {\n tabWidth: 2,\n printWidth: 150,\n singleQuote: true,\n trailingComma: 'es5',\n};\n\nconst PrettierDefaultOptions: PrettierOptions = {\n ...PrettierCommonOptions,\n plugins: [parserTypeScript],\n parser: 'typescript',\n};\n\nconst PrettierVueOptions: PrettierOptions = {\n ...PrettierCommonOptions,\n plugins: [parserHtml, parserBabel, parserTypeScript],\n parser: 'vue',\n};\n\nconst logger = Logger('codeFormatPlugin');\n\nexport const codeFormatPlugin = makePlugin({\n name: 'CodeFormatPlugin',\n functions: {\n async format(str: string, fileNameWithExt: string, options?: PrettierOptions): Promise<string> {\n function prettierFormat() {\n try {\n return format(str, {\n ...(fileNameWithExt.endsWith('.vue') ? PrettierVueOptions : PrettierDefaultOptions),\n ...options,\n });\n } catch (error) {\n logger.debug(error, 'format出错');\n return str;\n }\n }\n const res = await prettierFormat();\n return res;\n },\n },\n});\n","import { Container, injectable } from 'inversify';\nimport { ViewComponentIR } from '../../types/ir';\nimport { makePlugin } from '../../utils/plugin';\nimport { isNotNil } from '../../utils/types';\n\nexport type RouteIR =\n | {\n accumulativePath: string;\n thisLevelPath: string;\n elementMangledName?: string;\n elementTemplate: ViewComponentIR;\n children?: RouteIR[];\n authConfig?: AuthConfig;\n kind: 'normal';\n lazy?: boolean;\n meta: {\n title: string;\n crumb: string;\n };\n }\n | { accumulativePath: string; thisLevelPath: string; redirect: string; kind: 'redirect' };\n// TBD\ntype AuthConfig = unknown;\n\nconst notFoundPageKeyword = 'notFound';\nexport const routesExtractionPlugin = makePlugin({\n name: 'RoutesExtraction',\n functions: {\n extractRoute(\n components: ViewComponentIR[],\n routePrefix: string,\n options?: { lazy?: boolean; frameworkKind?: 'react' | 'vue2' | 'vue3' }\n ): { routes: RouteIR[]; authResourcePaths: string[]; baseResourcePaths: string[] } {\n const extractRouteHelper = (\n components: ViewComponentIR[],\n routePrefix: string\n ): RouteIR[] => {\n // 递归页面路由规则。对所有页面,都添加对应路由。子页面的路由应该将父路由路径作为前缀。\n return components.flatMap((c): RouteIR[] => {\n const path = `${routePrefix}${c.identifier}`;\n const route: RouteIR = {\n accumulativePath: path,\n thisLevelPath: `${c.identifier}`,\n children: extractRouteHelper(c.childComponents, `${path}/`),\n elementTemplate: c,\n kind: 'normal',\n lazy: !!options?.lazy,\n meta: {\n title: c.__raw.title ?? '',\n crumb: c.__raw.crumb?.value ?? '',\n },\n };\n // 默认跳转页规则。对标记为\"默认跳转页\"(即isIndex为true)的非顶级页面,在其父路由中添加到它的重定向。\n const redirectsForIndex = route.children\n ?.map((child): RouteIR | undefined => {\n if (child.kind === 'normal') {\n if (child.elementTemplate.__raw.isIndex) {\n return {\n accumulativePath: `${path}/`,\n thisLevelPath: ``,\n redirect: `${child.elementTemplate.identifier}`,\n kind: 'redirect',\n };\n }\n }\n return undefined;\n })\n .filter(isNotNil);\n if (redirectsForIndex?.length) {\n route.children?.push(...redirectsForIndex);\n }\n return [route];\n });\n };\n\n const routes: RouteIR[] = extractRouteHelper(components, routePrefix);\n\n // if (routePrefix !== '/') {\n // // 路由前缀规则。若定义了路由前缀:(1)需要保证所有路由的path都具有此前缀(2)另需要添加一条记录:访问`/`应该重定向到路由前缀本身。\n // routes.push({\n // accumulativePath: '/',\n // thisLevelPath: '/',\n // redirect: routePrefix,\n // kind: 'redirect',\n // });\n // }\n const possibleIndexComponent = components.find((x) => x.__raw.isIndex);\n if (possibleIndexComponent) {\n // 首页规则。对标记为首页的页面,添加一条路由:`/`重定向到此页面。\n routes.push({\n accumulativePath: '/',\n thisLevelPath: ``,\n redirect: `${possibleIndexComponent.identifier}`,\n kind: 'redirect',\n });\n }\n // fallback路由规则。依次选择:名为notFound的顶级页面、标记为首页的页面。\n const fallbackComponent =\n components.find((x) => x.identifier === notFoundPageKeyword) ?? possibleIndexComponent;\n if (fallbackComponent) {\n routes.push({\n accumulativePath: '*',\n thisLevelPath: '*',\n redirect: `${fallbackComponent.identifier}`,\n kind: 'redirect',\n });\n }\n\n const authResourcePaths: string[] = [];\n const baseResourcePaths: string[] = [];\n const normalRoutes = routes.filter((r) => r.kind === 'normal');\n\n normalRoutes.forEach((r) => {\n const traverseRoutes = (route: RouteIR, isParentRouteAuth?: boolean) => {\n if (route.kind === 'normal') {\n const view = route.elementTemplate.__raw;\n // 页面是否需要权限,如果父页面需要权限,子页面也一定需要\n const isViewAuth = isParentRouteAuth || view.auth;\n\n if (isViewAuth) {\n authResourcePaths.push(route.accumulativePath);\n } else {\n baseResourcePaths.push(route.accumulativePath);\n }\n\n route.children?.forEach((rr) => {\n traverseRoutes(rr, isViewAuth);\n });\n }\n };\n traverseRoutes(r, false);\n });\n\n return {\n authResourcePaths,\n baseResourcePaths,\n routes,\n };\n },\n },\n});\n\n@injectable()\nexport class RoutesExtractionPlugin {\n extractRoute(\n components: ViewComponentIR[],\n routePrefix: string,\n options?: { lazy?: boolean }\n ): { routes: RouteIR[]; authResourcePaths: string[]; baseResourcePaths: string[] } {\n return routesExtractionPlugin.functions.extractRoute(components, routePrefix, options);\n }\n static install(c: Container) {\n c.bind(RoutesExtractionPlugin).toSelf();\n return c;\n }\n}\n","import {\n Argument,\n Assignment,\n BaseNode,\n BindEvent,\n CallFunction,\n genHash,\n Identifier,\n Logic,\n Param,\n Return,\n TypeAnnotation,\n Unparsed,\n ViewElement,\n} from '@lcap/nasl-concepts';\nimport {\n isBooleanLiteral,\n isIdentifier,\n isMemberExpression,\n isNullLiteral,\n isNumericLiteral,\n isStringLiteral,\n} from '@lcap/nasl-concepts/asserts';\nimport { BindAttributeIR, BindEventIR } from '../../types/ir';\nimport { Logger } from '../../utils/logger';\nimport { makePlugin } from '../../utils/plugin';\nimport {\n StateContextIR,\n bindEventToAction,\n bindViewElementEventToIR,\n logicToLogicIR,\n paramToIR,\n} from '../ir-builder-plugin';\nimport { ReactChildrenPropName, ReactFileDescription } from './react-codegen-plugin';\nimport { capitalize } from 'lodash';\n\nconst logger = Logger('component hack');\n\nexport const reactComponentLibHackPlugin = makePlugin({\n name: 'ReactComponentLibHackPlugin',\n functions: {\n __hooksDefinitions(): ReactFileDescription {\n return new ReactFileDescription(\n 'ReactComponentLibHackHooks',\n [\n {\n import: '{initUtils, cookie}',\n from: '@lcap/basic-template',\n },\n {\n import: '{Modal}',\n from: 'antd',\n },\n {\n import: '{message}',\n from: '@lcap/pc-react-ui',\n },\n {\n from: './apis',\n import: '{enumsMap, dataTypesMap}',\n },\n {\n from: '@lcap/basic-template',\n import: '{ initAuth }',\n },\n {\n from: './apis',\n import: '{dataTypesGlobal}',\n },\n ],\n [],\n [\n `\n const {utils} = initUtils({enumsMap, dataTypesMap});\n const ui = { showMessage: message.info };\n\n function buildNaslAuth(){\n const { auth: baseAuth } = initAuth();\n const auth = Object.assign({\n decryptByAES: dataTypesGlobal.decryptByAES,\n encryptByAES: dataTypesGlobal.encryptByAES,\n hasAuth: dataTypesGlobal.hasAuth,\n }, baseAuth);\n Object.assign(auth, {\n logout: async () => {\n return Modal.confirm({\n content: '确定退出登录吗?',\n title: '提示',\n okText: '确定',\n cancelText: '取消',\n onOk: async () => {\n await baseAuth.logout();\n cookie.erase('authorization');\n cookie.erase('username');\n window.location.reload();\n },\n });\n },\n });\n return auth;\n }\n\n Object.assign(utils, {\n jsonSerialize: utils.JsonSerialize || JSON.stringify,\n jsonDeserialize: utils.JsonDeserialize || JSON.parse,\n });\n\n const logging = {\n ERROR: console.error,\n WARN: console.warn,\n DEBUG: console.debug,\n INFO: console.info,\n };\n\n const nasl = {util: utils, logging, ui, auth: buildNaslAuth()};\n export const useNasl = () => {\n return nasl;\n };\n\n `,\n ]\n );\n },\n hackBindAttribute<T extends BindAttributeIR & { kind: 'expr' }>(\n b: T\n ): BindAttributeIR & { kind: 'expr' } {\n function getTypeAnnotation(x: BaseNode): TypeAnnotation | undefined {\n // @ts-expect-error\n return x.typeAnnotation ?? x.__TypeAnnotation;\n }\n function isNASLPrimitiveStringType(x: TypeAnnotation) {\n return (\n x.typeKind === 'primitive' && x.typeNamespace === 'nasl.core' && x.typeName === 'String'\n );\n }\n\n if (\n b.name === ReactChildrenPropName &&\n b.__raw.type === 'dynamic' &&\n (b.__raw.parentNode as ViewElement)?.tag !== 'template'\n ) {\n const exprTypeAnnotation: TypeAnnotation | undefined = getTypeAnnotation(b.expression.expr);\n if (exprTypeAnnotation && isNASLPrimitiveStringType(exprTypeAnnotation)) {\n // 已经是字符串类型,保持原样即可\n return b;\n }\n // 表达式作为直接children绑定时,需要套一层ToString\n const arg = Argument.from({ expression: b.expression.expr }, b.__raw, 'arguments');\n // TODO wudengke 处理这里的new TypeAnnotation,考虑直接创建为String类型\n arg.__TypeAnnotation = exprTypeAnnotation ?? new TypeAnnotation();\n const call = CallFunction.from({\n calleeName: 'ToString',\n calleeNamespace: 'nasl.util',\n arguments: [arg],\n });\n // 定形规则:ToString的返回值是String\n call.__TypeAnnotation = TypeAnnotation.createPrimitive('String');\n return {\n ...b,\n expression: { expr: call },\n };\n }\n return b;\n },\n },\n});\n","import { StringLiteral } from '@lcap/nasl-concepts';\nimport { GeneralComponentIR } from '../../types/ir';\nimport { notImplemented } from '../../utils/assert';\nimport { Logger } from '../../utils/logger';\nimport { makePlugin } from '../../utils/plugin';\nimport { kebab2Pascal } from '../../utils/str';\nimport { isNotNil } from '../../utils/types';\nimport { javaScriptCodeGenPlugin } from '../language/javascript-codegen-plugin';\nimport { jsxCodeGenPlugin } from '../language/jsx-codegen-plugin';\nimport { RouteIR } from '../misc/routes-extraction-plugin';\nimport { ComponentIRToPathDict, ImportIR, ReactFileDescription } from './react-codegen-plugin';\n\nconst l = Logger('ReactRouterPlugin');\n\nconst ReactRouterDefaultImports: ImportIR[] = [\n {\n from: 'react-dom',\n import: 'ReactDOM',\n },\n {\n from: 'react',\n import: 'React, { useEffect, useState }',\n },\n {\n from: 'react-router-dom',\n import: ' { RouterProvider, Navigate, useNavigate,useLocation } ',\n },\n {\n from: './router/component',\n import: '{ createRouter }',\n },\n {\n from: './router/hooks',\n import: '{ useUserInfo, useUserResources }',\n },\n {\n from: './nasl',\n import: '{ useAppConfig }',\n },\n];\nexport const ReactRouterDefaultViewFolderName = '__views__';\nexport const ReactRouterDefaultBizComponentsFolderName = '__bizComponents__';\n\nexport class NameMangler {\n dict = new Map<string, number>();\n query(name: string) {\n const v = this.inc(name);\n if (v === 1) {\n return `${name}`;\n }\n return `${name}${v}`;\n }\n private inc(name: string) {\n const v = this.initName(name);\n this.dict.set(name, v + 1);\n return v + 1;\n }\n private initName(name: string) {\n if (!this.dict.has(name)) {\n this.dict.set(name, 0);\n return 0;\n } else {\n return this.dict.get(name)!;\n }\n }\n}\n\nexport const reactRouterPlugin = makePlugin({\n name: 'ReactRouter',\n functions: {\n routeToCode(\n routes: RouteIR[],\n componentIRToPathDict: ComponentIRToPathDict,\n basePath: string,\n ): { code: string; imports: ImportIR[] } {\n const self = { ...jsxCodeGenPlugin.functions, ...javaScriptCodeGenPlugin.functions };\n const nameMangler = new NameMangler();\n const importConfigMap = new WeakMap<GeneralComponentIR, ImportIR>();\n const viewComponentImports: ImportIR[] = recursivelyExtractImportIR(routes);\n\n function recursivelyExtractImportIR(routes: RouteIR[]): ImportIR[] {\n return routes.flatMap((r) => {\n if (r.kind === 'normal') {\n const elementIdentifier = r.elementTemplate.identifier;\n if (elementIdentifier) {\n const path = componentIRToPathDict.get(r.elementTemplate);\n const componentName = kebab2Pascal(elementIdentifier);\n const coalescedName = kebab2Pascal(\n `${path}${elementIdentifier}`.replaceAll('/', '-').replace(/^-/, '')\n );\n const mangledName = nameMangler.query(coalescedName);\n r.elementMangledName = mangledName;\n l.debug({ mangledName: mangledName });\n const from = `./${ReactRouterDefaultViewFolderName}${path}/${componentName}`;\n const importIR = {\n from,\n import: mangledName,\n lazy: r.lazy,\n };\n importConfigMap.set(r.elementTemplate, importIR);\n return [importIR, ...recursivelyExtractImportIR(r.children ?? [])];\n }\n }\n return [];\n });\n }\n\n function serializeReactRoute(r: RouteIR): string | undefined {\n const path = r.thisLevelPath ?? '/';\n if (r.kind === 'normal') {\n const children = r.children?.map(serializeReactRoute).filter(isNotNil) ?? [];\n const jsx = self.printTag(r.elementMangledName ?? r.elementTemplate.identifier);\n const childrenStr = children.join(',\\n');\n return `{path: \"${path}\", meta: ${JSON.stringify(\n r.meta\n )}, children: [${childrenStr}], ${importConfigToPropertyStr()} \\}`;\n function importConfigToPropertyStr() {\n return `element: ${jsx}`;\n }\n }\n if (r.kind === 'redirect') {\n const to = self.printSyntaxNode(StringLiteral.from({ value: r.redirect }));\n return `{path: \"${path}\", element: <Navigate to={${to}\\} />\\}`;\n }\n notImplemented(r);\n }\n const imports: ImportIR[] = [\n ...ReactRouterDefaultImports,\n ...viewComponentImports,\n {\n from: '@lcap/pc-react-ui',\n import: '{ConfigProvider, RouterContext}',\n },\n {\n from: './platform.config',\n import: 'platformConfig',\n },\n {\n from: '@/components/FrontendEventWrapper',\n import: 'FrontendEventWrapper',\n },\n ];\n const routesConfig = routes.map(serializeReactRoute).filter(isNotNil).join(',\\n');\n const routerConfigStr = `const defaultRoutes = [{\n path: '${basePath || '/'}',\n children: [\n ${routesConfig}\n ],\n element: <FrontendEventWrapper></FrontendEventWrapper>,\n },];`;\n const code = `\n ${routerConfigStr}\n function setDocumentTitleByMetaTitle(metaTitle: string) {\n const appConfig = platformConfig.appConfig;\n const titleTemplate = appConfig.documentTitle;\n if (titleTemplate) {\n document.title = titleTemplate.replace(/\\\\$页面标题/g, metaTitle).replace(/\\\\$应用名称/g, appConfig.project);\n } else {\n document.title = \\`\\$\\{metaTitle\\}-\\${appConfig.project}\\`;\n }\n }\n function App() {\n const { userInfo, userInfoError, userInfoLoading } = useUserInfo();\n const appConfig = useAppConfig();\n const { baseResourcePaths } = appConfig;\n const { resources, resourcesError, resourcesLoading } = useUserResources();\n\n const [routes, setRoutes] = useState(defaultRoutes);\n\n if (userInfoLoading || resourcesLoading) {\n return <div>Loading...</div>;\n }\n\n const ensureStartsWithSlash = (str) => str.startsWith('/') ? str : '/' + str;\n\n const basename =\n window.LcapMicro?.routePrefix\n ? ensureStartsWithSlash(window.LcapMicro?.routePrefix)\n : undefined;\n\n const router = createRouter(routes, { resources, userInfo, basename, beforeEach: ({meta})=>{\n window?.beforeRouter?.({meta});\n if(meta?.title){\n setDocumentTitleByMetaTitle(meta.title);\n }\n } });\n\n return (\n <RouterContext.Provider value={{router,useNavigate,useLocation}}>\n <ConfigProvider theme={{ cssVar: { prefix: 'cw', key: 'cw-nasl'}}} prefixCls=\"cw\">\n <RouterProvider router={router} />\n </ConfigProvider>\n </RouterContext.Provider>\n );\n }\n\n export default App;\n `;\n return {\n code,\n imports,\n };\n },\n __hooksDefinitions(): ReactFileDescription {\n return new ReactFileDescription(\n 'ReactRouterHooks',\n [\n {\n from: 'react-router-dom',\n import: '{ useSearchParams, useNavigate }',\n },\n {\n from: '@lcap/basic-template',\n import: '{initRouter}',\n },\n ],\n [],\n [\n `\n const {link, destination} = initRouter();\n export const useLink = ()=>link;\n export const useDestination = useNavigate;\n `,\n ]\n );\n },\n },\n});\n","import {\n Argument,\n asyncFuncMap as NaslAsyncFuncMap,\n BaseNode,\n CallFunction,\n CallLogic,\n Connector,\n DefaultValue,\n Destination,\n Identifier,\n Interface,\n Logic,\n LogicItem,\n LogicItemNode,\n MemberExpression,\n Module,\n Param,\n Return,\n StringLiteral,\n SubLogic,\n TypeAnnotation,\n Unparsed,\n Variable,\n CallConnector,\n} from '@lcap/nasl-concepts';\n\nimport {\n isAbort,\n isAnchor,\n isAnonymousFunction,\n isArgument,\n isAssignee,\n isAssignment,\n isBatchAssignment,\n isBinaryExpression,\n isBindAttribute,\n isBlock,\n isBooleanLiteral,\n isCallAuthInterface,\n isCallConnector,\n isCallEvent,\n isCallFunction,\n isCallInterface,\n isCallLogic,\n isCallQueryComponent,\n isComment,\n isDefaultValue,\n isDestination,\n isEnd,\n isExternalDestination,\n isForEachStatement,\n isIdentifier,\n isIfStatement,\n isJSBlock,\n isJavaLogic,\n isLogic,\n isLogicItem,\n isMatch,\n isMatchCase,\n isMemberExpression,\n isNew,\n isNewComposite,\n isNewList,\n isNewMap,\n isNullLiteral,\n isNumericLiteral,\n isOqlQueryComponent,\n isParam,\n isProcessOutcome,\n isProcessOutcomes,\n isQueryAggregateExpression,\n isQueryFieldExpression,\n isQueryFromExpression,\n isQueryGroupByExpression,\n isQueryJoinExpression,\n isQueryLimitExpression,\n isQueryOrderByExpression,\n isQuerySelectExpression,\n isReturn,\n isSqlQueryComponent,\n isStart,\n isStrictCallLogic,\n isStringInterpolation,\n isStringLiteral,\n isSubLogic,\n isSwitchCase,\n isSwitchStatement,\n isTypeAnnotation,\n isUnaryExpression,\n isUnparsed,\n isValidationRule,\n isVariable,\n isWhileStatement,\n} from '@lcap/nasl-concepts/asserts';\n\nimport { transfromMetadataType, transformUnionTypeAnnotation } from '@lcap/nasl-concepts/service';\n\nimport * as breakpoint from '@lcap/nasl-breakpoint';\n\nimport { injectable } from 'inversify';\nimport * as JSON5 from 'json5';\nimport { isNil } from 'lodash';\nimport { JavaScriptDomain } from '../../service-interface';\nimport { neverImplemented, notImplemented, todo } from '../../utils/assert';\nimport { Logger } from '../../utils/logger';\nimport { findConceptKeyWordIndexFromNamespace } from '../../utils/nasl';\nimport { capitalizeFirstLetter } from '../../utils/str';\nimport { makePlugin } from '../../utils/plugin';\nimport { defaultErrorMessageDict } from './asset/defaultErrorMessage';\nimport { isLogNode } from '../misc/logging/copied-log';\n\n// TODO wudengke 处理它\nconst LogReportFunctionSymbol = '$logReport';\n\nconst logger = Logger('JavaScriptCodeGen');\n\ntype Other =\n | Return\n | Variable\n | Param\n | DefaultValue\n | breakpoint.AfterStartNode\n | breakpoint.BeforeEndNode\n | breakpoint.CallbackNode\n | breakpoint.BreakpointNode\n | BaseNode;\nexport type HasRuntimeSemantics = LogicItem | Logic | Other;\n\nexport type javaScriptCodeGenCallBackBag = {\n readonly resolve?: (\n payload:\n | { kind: 'calleeNamespace'; value: string }\n | {\n kind: 'identifier';\n value: Identifier;\n }\n ) => // TODO wudengke 可以返回语义更加丰富的信息。用对象包起来,可以给调用处指示是否需要插入?.\n string | undefined;\n readonly shouldInsertOptional?: boolean;\n readonly isAsyncAnonymousFunction?: boolean;\n};\nfunction getRuntimeStr(s: HasRuntimeSemantics, callbackBag?: javaScriptCodeGenCallBackBag): string {\n return toCode(wrapWithGenInitFromSchemaIfNecessary(s));\n\n function toCode(s: HasRuntimeSemantics) {\n // TODO wudengke 移动到 logging 插件当中\n if (isLogNode(s)) {\n if (s.__actualNode) {\n let code = getRuntimeStr(s.__actualNode, callbackBag);\n const messageExpr = s.__actualNode.arguments?.[0];\n const message = getRuntimeStr(messageExpr, callbackBag);\n const calleeName = s.__actualNode.calleeName;\n const logReportFunctionCalleeName = callbackBag?.resolve?.({\n kind: 'calleeNamespace',\n value: LogReportFunctionSymbol,\n });\n if (!logReportFunctionCalleeName) {\n throw new Error(`cannot reolve ${LogReportFunctionSymbol}`);\n }\n code += `;${logReportFunctionCalleeName}({\n logicName: '${s.__logic?.name}',\n path: '${s.__path}',\n level: '${calleeName}',\n message: ${message},\n });`;\n return code;\n }\n return '';\n } else if (isBreakpointLogic(s)) {\n return breakpointLogicToTS(s);\n } else if (isLogicItem(s)) {\n return logicItemToTS(s);\n } else if (isLogic(s)) {\n return logicToTs(s);\n }\n return otherToTS(s);\n }\n\n function wrapWithGenInitFromSchema<T extends HasRuntimeSemantics>(s: T): T | CallFunction {\n // 根据packages/nasl/src/concepts下的原始逻辑,这些语法节点可能需要包裹genInitFromSchema\n\n //@ts-expect-error typeAnnotation属性并不存在\n const typeAnnotation: TypeAnnotation | undefined = s.typeAnnotation || s.__TypeAnnotation;\n let { sortedTypeKey, typeKind, typeName, typeNamespace } = typeAnnotation || {};\n if (typeNamespace?.endsWith('.metadataTypes')) {\n const typeAn: TypeAnnotation | undefined = s.app.findNodeByCompleteName(\n typeNamespace + '.' + typeName\n )?.typeAnnotation;\n if (typeAn) {\n sortedTypeKey = `${typeAn.typeNamespace}.${typeAn.typeName}`;\n typeKind = typeAn.typeKind;\n typeName = typeAn.typeName;\n }\n }\n const needGenInitFromSchema =\n typeAnnotation && (!['primitive'].includes(typeKind ?? '') || typeName === 'DateTime');\n if (needGenInitFromSchema) {\n const code = toCode(s);\n const newNode = CallFunction.from(\n {\n calleeName: 'genInitFromSchema',\n arguments: [\n new Argument({ expression: new StringLiteral({ value: sortedTypeKey }) }),\n new Argument({ expression: new Unparsed({ code }) }),\n ],\n },\n s.parentNode,\n s.parentKey\n );\n return newNode;\n }\n return s;\n }\n\n function wrapWithGenInitFromSchemaIfNecessary<T extends HasRuntimeSemantics>(\n s: T\n ): T | CallFunction {\n if (isCallFunction(s) || isCallLogic(s) || isNewComposite(s) || isDefaultValue(s)) {\n return wrapWithGenInitFromSchema(s);\n }\n return s;\n }\n function toAnonymousFunctionStr<T extends LogicItem>(b: { logics: [T]; params: Param[] }) {\n const code = `(${toParamsStr()})=>(${toBodyStr()})`;\n return callbackBag?.isAsyncAnonymousFunction ? `async ${code}` : code;\n function toBodyStr() {\n const logic = b.logics[0];\n return getRuntimeStr(logic, { ...callbackBag, isAsyncAnonymousFunction: false });\n }\n function toParamsStr() {\n return b.params.map((x) => x.name).toString();\n }\n }\n\n function logicToTs(s: Logic | SubLogic): string {\n let code = 'async (';\n // 声明函数参数\n if (Array.isArray(s.params)) {\n code += s.params.map((x) => x.name).toString();\n }\n code += ') => {';\n // 为参数赋值\n if (Array.isArray(s.params)) {\n s.params.forEach((param) => {\n const str = getRuntimeStr(param, callbackBag);\n // TODO wudengke 如果没有默认值则不需要赋值\n if (param.name !== str) {\n code += `${param.name} = ${str};\\n`;\n }\n });\n }\n // 声明局部变量容器\n if (Array.isArray(s.variables)) {\n s.variables.forEach((x) => {\n code += `let ${getRuntimeStr(x, callbackBag)};\\n`;\n });\n }\n // 声明返回值容器\n if (Array.isArray(s.returns)) {\n s.returns.forEach((ret) => {\n code += `let ${getRuntimeStr(ret, callbackBag)};\\n`;\n });\n }\n if (Array.isArray(s.body)) {\n s.body.forEach((item) => {\n if (isNil(item)) {\n logger.error(`${s.nodePath} 的 body 有空值`);\n throw new Error('');\n }\n code += toCode(item);\n code += '\\n';\n });\n }\n code += '}';\n return code;\n }\n\n function isBreakpointLogic(s: HasRuntimeSemantics) {\n return (\n s instanceof breakpoint.AfterStartNode ||\n s instanceof breakpoint.BeforeEndNode ||\n s instanceof breakpoint.CallbackNode ||\n s instanceof breakpoint.BreakpointNode\n );\n }\n\n function breakpointLogicToTS(s: HasRuntimeSemantics): string {\n if (s instanceof breakpoint.AfterStartNode) {\n const id = s._logicNodePath;\n const logic = getRuntimeStr(s.logic as Logic, callbackBag);\n const breaker = `const $breaker = window.$breaker.colonize()`;\n const hook = `await $breaker.fireHook('after-start')('${id}')`;\n const list = [logic, breaker, hook];\n\n return list.filter(Boolean).join('\\n');\n }\n\n if (s instanceof breakpoint.BeforeEndNode) {\n const id = s._logicNodePath;\n const logic = getRuntimeStr(s.logic as Logic, callbackBag);\n const hook = `await $breaker.fireHook('before-end')('${id}')`;\n\n return `${hook}\\n${logic}`;\n }\n\n if (s instanceof breakpoint.CallbackNode) {\n const node = s.logic || s.variable;\n\n if (!node) {\n return '';\n }\n\n const code = getRuntimeStr(node as Logic, callbackBag);\n const founctional = breakpoint.isFunctional(node);\n\n if (!founctional) {\n return code;\n }\n\n if (!code) {\n return code;\n }\n\n return `$breaker.transfer(($breaker) => ${code})`;\n }\n\n if (s instanceof breakpoint.BreakpointNode) {\n const node = s.logic || s.variable;\n const id = s._nodePath;\n const keyword = `generateBreakpoint('${id}'`;\n const breaker = id && `await $breaker.generateBreakpoint('${id}', ${breakpoint.parse})()`;\n\n if (!node) {\n return breaker;\n }\n\n let result;\n\n const generators = breakpoint.makeGenerators(false, getRuntimeStr, callbackBag);\n result = generators.reduce((code, generator) => code || generator(s)(breaker), '');\n\n const failsafes = breakpoint.makeGenerators(true, getRuntimeStr, callbackBag);\n result = failsafes.reduce((code, generator) => {\n const useful = code && code.includes(keyword);\n return useful ? code : generator(s)(breaker);\n }, result);\n\n return result || breaker;\n }\n\n return notImplemented(s);\n }\n\n function otherToTS(s: HasRuntimeSemantics): string {\n if (isReturn(s)) {\n const left =\n callbackBag?.resolve?.({\n kind: 'identifier',\n value: new Identifier({ name: s.name }),\n }) ?? s.name;\n const right = makeRight(s);\n return `${left} = ${right}`;\n function makeRight(returnNode: Return) {\n let code = '';\n const typeAnnotation = returnNode.typeAnnotation || returnNode.__TypeAnnotation;\n const needGenInitFromSchema =\n typeAnnotation &&\n (!['primitive'].includes(typeAnnotation.typeKind) ||\n typeAnnotation.typeName === 'DateTime');\n if (needGenInitFromSchema) {\n code += `genInitFromSchema('${typeAnnotation?.sortedTypeKey}',`;\n }\n const defaultExpr = returnNode.defaultValue?.toJS?.() ?? 'undefined';\n code += defaultExpr;\n if (needGenInitFromSchema) {\n code += `)`;\n }\n return code;\n }\n }\n\n if (isParam(s)) {\n const expressionJS = s.defaultValue ? getRuntimeStr(s.defaultValue, callbackBag) : undefined;\n if (expressionJS) {\n return `${s.name} === undefined ? ${expressionJS} : ${s.name}`;\n }\n return `${s.name}`;\n // TODO wudengke 确认逻辑\n // return `${s.name} === undefined ? (localStore.$queryParams.has(${JSON.stringify(s.name)}) ? genInitFromSchema('${undefined}', localStore.$queryParams.get(${JSON.stringify(s.name)})): ${expressionJS}) : ${s.name}`;\n }\n\n if (isVariable(s)) {\n const typeAnnotation = s.typeAnnotation || s.__TypeAnnotation;\n let { sortedTypeKey, typeKind, typeName, typeNamespace } = typeAnnotation || {};\n if (typeNamespace?.endsWith('.metadataTypes')) {\n const referenceNode = s.app.findNodeByCompleteName(typeNamespace + '.' + typeName) || {};\n const typeAn = referenceNode.typeAnnotation || {};\n sortedTypeKey = `${typeAn.typeNamespace}.${typeAn.typeName}`;\n typeKind = typeAn.typeKind;\n typeName = typeAn.typeName;\n }\n const needGenInitFromSchema =\n typeAnnotation && (!['primitive'].includes(typeKind) || typeName === 'DateTime');\n let code = `${s.name} = `;\n if (needGenInitFromSchema) {\n code += `genInitFromSchema('${sortedTypeKey}',`;\n }\n\n if (s.defaultValue?.expression) {\n const expressionJS = getRuntimeStr(s.defaultValue.expression, callbackBag);\n code += expressionJS;\n } else {\n code += 'undefined';\n }\n if (needGenInitFromSchema) {\n code += `)`;\n }\n return code;\n }\n\n if (isDefaultValue(s)) {\n let code = '';\n if (\n ['Date', 'Time', 'DateTime'].includes((s.parentNode as any)?.typeAnnotation?.typeName) &&\n (s.expression as any)?.value === ''\n ) {\n return 'null';\n }\n code += s.expression ? getRuntimeStr(s.expression, callbackBag) : `undefined`;\n return code;\n }\n\n return notImplemented(s);\n }\n\n function qualifiedCalleeName(a: { calleeNamespace: string | undefined; calleeName: string }) {\n if (a.calleeNamespace) {\n const ns = a.calleeNamespace;\n const isExtensionsLibrary = ns.startsWith('extensions.');\n const isFrontendLibrary = ns.startsWith('extensions.') && ns.includes('.frontends.');\n const qualifiedCallee = `'${a.calleeNamespace}.${a.calleeName}'`;\n if (a.calleeNamespace.startsWith('connector.')) {\n // FIXME wudengke hack\n return `apiClient[${qualifiedCallee}]`;\n } else if (a.calleeNamespace.startsWith('sharedApp.')) {\n return `apiClient[${qualifiedCallee}]`;\n } else if (a.calleeNamespace.startsWith('app.dataSources.')) {\n // FIXME wudengke hack\n return `apiClient[${qualifiedCallee}]`;\n } else if (isExtensionsLibrary) {\n if (isFrontendLibrary) {\n // calleeNamespace 形如 'extensions.cw_cryptojs_library.frontends.pc.logics'\n const extensionLibraryName = ns.split('.')[1];\n return `$library['${extensionLibraryName}']['${a.calleeName}']`;\n } else {\n // 对服务端依赖库的调用\n return `apiClient[${qualifiedCallee}]`;\n }\n }\n const calleeNamespace =\n callbackBag?.resolve?.({\n kind: 'calleeNamespace',\n value: a.calleeNamespace,\n }) ?? a.calleeNamespace;\n return `${calleeNamespace}.${a.calleeName}`;\n } else {\n return (\n callbackBag?.resolve?.({\n kind: 'identifier',\n value: new Identifier({ name: a.calleeName }),\n }) ?? a.calleeName\n );\n }\n }\n\n function processV2CallLogicToJS(s: CallLogic) {\n let code = '';\n code += `window.$systemProcessV2['${s.calleeName}']?.`;\n code += `({\n body: {\n `;\n const argsStr = (s?.arguments || [])\n .filter((obj) => obj?.expression)\n .map(\n (obj) =>\n `\\n${obj.keyword}: ${obj.expression ? getRuntimeStr(obj.expression, callbackBag) : ''}`\n )\n .join(', ');\n code += argsStr;\n\n code += `}\n })`;\n return code;\n }\n\n function generalCallToJS(s: CallFunction | CallLogic | CallConnector) {\n if (isCallLogic(s) && s.isProcessV2Logic) {\n return processV2CallLogicToJS(s);\n }\n\n const calleeName = qualifiedCalleeName(s);\n const args = isCallLogic(s)\n ? getArgs(s).join(', ')\n : s.arguments.map((x) => getRuntimeStr(x, callbackBag)).join(', ');\n // FIXME wudengke 去掉?\n return `${calleeName}?.(${args})`;\n\n function getArgs(s: CallLogic | CallConnector) {\n function getConfigCode() {\n if (isCallConnector(s)) {\n const connectionName = s.calleeConnectionName;\n if (connectionName) {\n return `\n config: {\n download: false,\n connectionName: ${JSON.stringify(connectionName)},\n },`;\n }\n }\n\n const logic: Logic | undefined = s.getCallNode();\n const isManualErrorHandlingEnabled =\n s.handleError && logic && Logic.checkLogicReturnTypeHasError(logic);\n const isCustomErrorMessageEnabled = !isManualErrorHandlingEnabled && !!s.errorMessage;\n const handleErrorCode = isManualErrorHandlingEnabled ? `handleError: true,` : '';\n const errorMessageCode =\n isCustomErrorMessageEnabled && s.errorMessage\n ? `errorMessage: ${logicItemToTS(s.errorMessage)},`\n : '';\n\n return `config: {\n download: false,\n ${handleErrorCode}\n ${errorMessageCode}\n }, `;\n }\n // from packages/nasl/src/concepts/CallLogic__.ts\n let code = '';\n code += `\n ${getConfigCode()}\n headers: {\n \"lcap-calllogic-uuid\": \"${s.uuid}\",\n },`;\n const calleeName = s.calleeName;\n if (!s.isViewLogic) {\n const logic = s.getCallNode() as Logic;\n const args = logic?.params || [];\n const isSpreadFunc = args.some((arg) => arg.spread);\n const keywordEntitiesIndex = findConceptKeyWordIndexFromNamespace(\n s.calleeNamespace,\n 'entities'\n );\n const keywordProcessIndex = findConceptKeyWordIndexFromNamespace(\n s.calleeNamespace,\n 'processes'\n );\n if (keywordEntitiesIndex !== -1) {\n let logicArgs = s.arguments;\n let breakBody = false;\n switch (calleeName) {\n case 'get':\n case 'delete': {\n logicArgs = [];\n code += `query: {`;\n const argsStr = args\n .map((arg, index) => {\n const actualArg = s.arguments?.[index];\n return {\n keyword: arg?.name,\n arg: actualArg,\n };\n })\n .filter((obj) => obj.arg) // 示例:赋值节点右边为调用节点时,调用节点会包两层断点节点,在翻译时调用节点的形参params会多传入一个name为attribute的参数,arguments 没有对应值,导致actualArg为undefined,所以需要过滤掉\n .map((obj) => `\\n${obj.keyword}: ${getRuntimeStr(obj.arg, callbackBag)}`)\n .join(', ');\n code += argsStr;\n code += `},\\n`;\n break;\n }\n case 'update':\n case 'createOrUpdate':\n case 'batchUpdate': {\n code += `body: {\\n`;\n const argsStr = logicArgs\n .map((arg) => {\n const name =\n arg.keyword === 'body'\n ? s.calleeName === 'batchUpdate'\n ? 'entities'\n : 'entity'\n : arg.keyword;\n return `${name}: ${getRuntimeStr(arg.expression!, callbackBag)}`;\n })\n .join(',\\n');\n code += argsStr;\n code += `},\\n`;\n logicArgs = [];\n breakBody = true;\n break;\n }\n case 'updateBy': {\n code += `body: {`;\n const argsStr = logicArgs\n .map((arg: any) => {\n const name = arg.keyword === 'body' ? 'entity' : arg.keyword;\n // filter回调函数\n if (arg.expression.returnExpression) {\n const argsStr = JSON.stringify(\n handleMember(arg.expression.returnExpression)\n ).replace(/\"__@@(.*?)@@__\"/g, '$1');\n return `${name}: {\n concept: 'Function',\n name: 'filter',\n returnExpression: window.$resolveRequestData(${argsStr})\n }`;\n }\n return `${name}: ${getRuntimeStr(arg.expression, callbackBag)}`;\n })\n .join(',');\n code += argsStr;\n code += `},\\n`;\n logicArgs = [];\n breakBody = true;\n break;\n }\n case 'deleteBy': {\n code += `body: `;\n const argsStr = JSON.stringify(\n handleMember((logicArgs[0].expression as any).returnExpression)\n ).replace(/\"__@@(.*?)@@__\"/g, '$1');\n code += `{\n concept: 'Function',\n name: 'filter',\n returnExpression: window.$resolveRequestData(${argsStr})\n }`;\n code += `,\\n`;\n logicArgs = [];\n breakBody = true;\n break;\n }\n default:\n break;\n }\n const bodyArgument = logicArgs.find((arg) => arg.keyword === 'body');\n if (!breakBody) {\n if (bodyArgument) {\n code += `\\n${bodyArgument?.keyword}: ${getRuntimeStr(bodyArgument, callbackBag)}`;\n } else {\n code += `body: {}`;\n }\n }\n } else {\n const isProcessLogic = keywordProcessIndex !== -1;\n const isShowArgument = (arg?: Argument) => {\n return !!arg?.expression;\n };\n code += `path: {},\n body: {`;\n if (!isProcessLogic) {\n const formatArgs: Array<Param> = [...args];\n let spreadParams: Param | undefined = undefined;\n // 如果是可变参数,需要先去掉最后一位可变参数位,在后面进行单独处理\n if (isSpreadFunc) {\n spreadParams = formatArgs.pop();\n }\n const filterArgs = formatArgs\n .map((arg, index) => {\n const actualArg = s.completeArguments[index];\n const keyword = arg?.name;\n return {\n keyword,\n arg: actualArg,\n };\n })\n .filter((item) => isShowArgument(item.arg));\n const argsStr = filterArgs\n .map((obj) => `\\n${obj?.keyword}: ${getRuntimeStr(obj?.arg, callbackBag)}`)\n .join(', ');\n code += argsStr;\n // 如果参数长度不为 0,则表示有参数,需要添加逗号\n // 放弃开头加逗号的写法,因为这样会导致参数为空的时候,会多一个逗号\n // https://projectmanage.netease-official.lcap.163yun.com/dashboard/BugDetail?id=2851152441926912\n if (filterArgs.length) {\n code += ', ';\n }\n // 如果是可变参数,需要单独处理\n if (isSpreadFunc) {\n const spreadArg = s.completeArguments.slice(formatArgs.length);\n const isShowArgument = (arg?: Argument) => {\n return arg?.expression;\n };\n const spreadArgStr = spreadArg\n .filter((arg) => {\n return isShowArgument(arg);\n })\n .map((arg) => getRuntimeStr(arg, callbackBag) || '')\n .join(', ');\n code += `\\n${spreadParams!.name}: [${spreadArgStr}],`;\n }\n const completeTypeArguments = s.__TypeArguments?.length\n ? s.__TypeArguments\n : s.typeArguments;\n if (Array.isArray(completeTypeArguments) && completeTypeArguments.length) {\n code += `\\n__typeArguments: ${JSON5.stringify(completeTypeArguments)}`;\n }\n }\n code += `}`;\n }\n } else {\n // TODO wudengke 搬运一下代码\n return s.arguments.map((x) => getRuntimeStr(x, callbackBag));\n }\n\n return [`{${code}}`];\n\n function handleMember(root: any): any {\n if (!root) return;\n if (root.concept === 'Identifier') {\n const str = getRuntimeStr(root, callbackBag);\n return {\n concept: root.concept,\n name: root.name,\n value: `__@@${str}@@__`,\n expression: str,\n };\n }\n if (root.concept === 'MemberExpression') {\n let { concept } = root;\n let { value } = root;\n if (root?.object.name === '_') {\n return {\n concept,\n name: root.name,\n value,\n object: root.object,\n property: root.property,\n };\n }\n let expression: string | undefined = getRuntimeStr(root, callbackBag);\n if (root.object?.namespace === 'app.enums') {\n value = expression.replace(/^\"(.+)\"$/, '$1');\n expression = undefined;\n concept = 'StringLiteral';\n } else {\n value = `__@@${expression}@@__`;\n }\n return {\n concept,\n name: root.name,\n value,\n expression,\n };\n }\n\n let left;\n if (root.concept === 'UnaryExpression') {\n left = handleMember(root.argument);\n } else {\n left = handleMember(root.left);\n }\n const right = handleMember(root.right);\n return {\n concept: root.concept,\n name: root.name,\n value: root.value,\n expression: root.expression,\n operator: root.operator,\n left,\n right,\n };\n }\n }\n }\n\n function batchLogicItemsToTS(s: LogicItemNode[]): string {\n return s.map((n) => getRuntimeStr(n, callbackBag)).join(';\\n');\n }\n\n function logicItemToTS(s: LogicItem): string {\n if (isSubLogic(s)) {\n // SubLogic和Logic的处理逻辑是一样的\n return logicToTs(s);\n } else if (isAnonymousFunction(s)) {\n // Vue 翻译器的特殊处理\n const grandParent = s.parentNode?.parentNode;\n if (\n isCallLogic(grandParent) &&\n /dataSources\\.[^.]+\\.entities\\.[^.]+\\.logics/.test(grandParent.calleeNamespace) &&\n ['update', 'updateBy', 'createOrUpdate', 'batchUpdate'].includes(grandParent.calleeName)\n ) {\n const toJSOfEntityLogicProperties = (): string => {\n let code = '[';\n if (s.body && isNewList(s.body)) {\n // @ts-expect-error 迁移自Vue翻译器\n s.body.items.forEach((item: MemberExpression, index, array) => {\n code += `'${getRuntimeStr(item.property, undefined)}'`;\n if (index !== array.length - 1) code += ',';\n });\n }\n code += ']';\n return code;\n };\n return toJSOfEntityLogicProperties();\n }\n return toAnonymousFunctionStr({ logics: [s.body], params: s.params });\n } else if (isAbort(s)) {\n return `throw Error('程序中止');`;\n } else if (isStart(s)) {\n return '';\n } else if (isEnd(s)) {\n const ret = s.logic.returns.at(0);\n if (ret) {\n return `return ${ret.name};`;\n } else {\n return 'return;';\n }\n } else if (isIfStatement(s)) {\n let code = `if(${getRuntimeStr(s.test, callbackBag)}){\n ${batchLogicItemsToTS(s.consequent)}\n }`;\n if (s.alternate.length) {\n return `${code} else {${batchLogicItemsToTS(s.alternate)}\\}`;\n }\n return code;\n } else if (isSwitchStatement(s)) {\n let code = '';\n s.cases.forEach((item) => {\n code += getRuntimeStr(item, callbackBag);\n });\n return code;\n } else if (isSwitchCase(s)) {\n const parent = s.parentNode;\n if (!isSwitchStatement(parent)) {\n throw new Error('SwitchCase的父节点不是SwitchStatement');\n }\n const index = parent.cases.indexOf(s);\n const length = parent.cases.length;\n if (index === -1) {\n throw new Error('无法在父节点中找到此SwitchCase');\n }\n let code = '';\n if (index === 0) {\n code = 'if (';\n code += s.test ? getRuntimeStr(s.test, callbackBag) : '';\n code += ') {\\n';\n } else if (index !== length - 1) {\n code = 'else if (';\n code += s.test ? getRuntimeStr(s.test, callbackBag) : '';\n code += ') {\\n';\n } else {\n code += 'else {\\n';\n }\n if (Array.isArray(s.consequent)) {\n s.consequent.forEach((logicItem) => {\n code += `${getRuntimeStr(logicItem, callbackBag)}\\n`;\n });\n }\n code += '}\\n';\n return code;\n } else if (isForEachStatement(s)) {\n let code = '';\n const list = s.each ? getRuntimeStr(s.each, callbackBag) : '';\n const suffix = s.getVariableSuffix();\n const eachCode = `$forEachListVariable${suffix}`;\n let endValue = '';\n if (s.end) {\n endValue = getRuntimeStr(s.end, callbackBag);\n } else if (s.each) {\n endValue = `(${eachCode} || {}).length`;\n }\n code += `var ${eachCode} = ${list};\\n`;\n code += `var $forEachStartVariable${suffix} = ${\n s.start && getRuntimeStr(s.start, callbackBag)\n };\\n`;\n code += `var $forEachEndVariable${suffix} = ${endValue};\\n`;\n code += `if(Array.isArray($forEachListVariable${suffix})) {\\n`;\n code += `for (let ${s.index.name} = $forEachStartVariable${suffix}; `;\n code += `${s.index.name} < $forEachEndVariable${suffix}; ${s.index.name}++) {\\n`;\n code += `var ${s.item.name} = $forEachListVariable${suffix}[${s.index.name}];\\n`;\n if (Array.isArray(s.body)) {\n s.body.forEach((logicItem) => {\n code += `${getRuntimeStr(logicItem, callbackBag)}\\n`;\n });\n }\n code += '}\\n';\n code += '}\\n';\n return code;\n } else if (isWhileStatement(s)) {\n let code = '';\n code += 'while (';\n code += s.test ? getRuntimeStr(s.test, callbackBag) : '';\n code += ') {\\n';\n\n if (Array.isArray(s.body)) {\n s.body.forEach((logicItem) => {\n code += `${getRuntimeStr(logicItem, callbackBag)}\\n`;\n });\n }\n\n code += `}\\n`;\n return code;\n } else if (isAssignment(s)) {\n return `${getRuntimeStr(s.left, {\n ...callbackBag,\n shouldInsertOptional: false,\n })} = ${getRuntimeStr(s.right, callbackBag)}`;\n } else if (isBatchAssignment(s)) {\n // 迁移自Vue的BatchAssignment@toJS\n\n let code = '';\n const rightMap = new Map();\n s.assignmentLines.forEach(({ leftIndex, rightIndex }) => {\n const rightIndexJson = JSON.stringify(rightIndex);\n if (rightMap.has(rightIndexJson)) {\n rightMap.set(rightIndexJson, [...rightMap.get(rightIndexJson), leftIndex]);\n } else {\n rightMap.set(rightIndexJson, [leftIndex]);\n }\n });\n rightMap.forEach((leftIndexs, rightIndexJson) => {\n const rightIndex = JSON.parse(rightIndexJson) || [];\n const leftItems = leftIndexs.map((leftIndex: Array<number>) => {\n const leftItem =\n leftIndex.length !== 1 ? s.left.members[leftIndex[1]] : s.left.expression;\n return leftItem;\n });\n const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];\n const rightItem =\n rightSecond !== undefined\n ? s.rights[rightFirst].members[rightSecond]\n : s.rights[rightFirst].expression;\n leftItems.forEach((leftItem: LogicItem) => {\n code += `${getRuntimeStr(leftItem, { ...callbackBag, shouldInsertOptional: false })}`;\n code += ` = `;\n });\n code += `${getRuntimeStr(rightItem, callbackBag)}`;\n code += ';\\n';\n });\n return code;\n } else if (isComment(s)) {\n const midLines = s.value.split('\\n').map((x) => `* ${x}`);\n return ['/**', ...midLines, '*/'].join('\\n');\n } else if (isStrictCallLogic(s)) {\n // HACK wudengke 优雅一点\n if (\n ['jsonSerialize', 'jsonDeserialize'].includes(s.calleeName) &&\n s.calleeNamespace === 'nasl.util'\n ) {\n // 不需要await了\n return generalCallToJS(s);\n }\n\n if (\n s.calleeNamespace === 'nasl.browser' ||\n s.calleeNamespace === 'nasl.configuration' ||\n s.calleeNamespace === 'nasl.process'\n ) {\n s.calleeNamespace = '$global';\n }\n return `await (${generalCallToJS(s)})`;\n } else if (isCallConnector(s)) {\n return `await (${generalCallToJS(s)})`;\n } else if (isCallFunction(s)) {\n // 搬运自原来的CallFunction@toJS\n let code = '';\n\n const ancestorLogic = s.getAncestor('Logic');\n /**\n * 若在Logic下,则翻译为异步的版本\n * 因为其中子表达式可能会调用await\n */\n let possibleAsyncCalleeName = s.calleeName;\n let isAsyncCallee = false;\n if (s.view && ancestorLogic) {\n possibleAsyncCalleeName = NaslAsyncFuncMap[s.calleeName]\n ? NaslAsyncFuncMap[s.calleeName]\n : possibleAsyncCalleeName;\n if (NaslAsyncFuncMap[s.calleeName]) {\n isAsyncCallee = true;\n }\n }\n\n const qualifiedCallee = qualifiedCalleeName({\n calleeName: possibleAsyncCalleeName,\n calleeNamespace: s.calleeNamespace,\n });\n\n code += `${qualifiedCallee}`;\n code += '(';\n\n let argTyAnno;\n if (['ToString', 'EnumItemToText', 'EnumItemToStructure'].includes(s.calleeName)) {\n const arg0 = s.arguments[0];\n argTyAnno = (arg0 as any).typeAnnotation || arg0.__TypeAnnotation;\n } else if (s.calleeName === 'FromString') {\n argTyAnno = s.typeArguments?.[0];\n }\n\n // 调整 ToString 的 typeKey 到第一个参数,剩下的以后重构。\n // 事实上,大部分编译器都会选择把 type tag 放到前端来做运行时匹配,而非末位。\n if (\n ['ToString', 'EnumItemToText', 'EnumItemToStructure'].includes(s.calleeName) &&\n argTyAnno\n ) {\n if ('ToString' === s.calleeName) {\n argTyAnno = transfromMetadataType(argTyAnno, s.app);\n }\n code += `'${argTyAnno.sortedTypeKey}', `;\n }\n\n if (Array.isArray(s.arguments) && s.arguments.length) {\n s.arguments.forEach((arg, index) => {\n // TODO: wudengke 移动到IR构建阶段\n let argStr = getRuntimeStr(arg, {\n ...callbackBag,\n isAsyncAnonymousFunction: isAsyncCallee,\n });\n const argTypeAnnotation = arg.typeAnnotation || arg.__TypeAnnotation;\n transformUnionTypeAnnotation(argTypeAnnotation, s.app);\n const { sortedTypeKey } = transfromMetadataType(argTypeAnnotation, s.app);\n if (['HasValue'].includes(s.calleeName)) {\n argStr = `{ type: '${sortedTypeKey}', value: ${argStr} }`;\n }\n code += argStr;\n if (index !== s.arguments?.length - 1) code += ', ';\n });\n }\n\n if (s.calleeName === 'FromString' && argTyAnno) {\n const { sortedTypeKey } = transfromMetadataType(argTyAnno, s.app);\n code += `, '${sortedTypeKey}'`;\n }\n // 用作做语义控制。后面这段代码没完全理解,需要保持进入条件不变。\n const flagControl = ['ToString', 'FromString'].includes(s.calleeName) && argTyAnno;\n if (!flagControl && Array.isArray(s.typeArguments) && s.typeArguments.length) {\n if (s.arguments?.length) code += ', ';\n\n const typeArgumentsLength = s.typeArguments.length;\n s.typeArguments?.forEach((tyArg, index) => {\n code += JSON.stringify(tyArg);\n if (index !== typeArgumentsLength - 1) code += ', ';\n });\n }\n\n code += ')';\n if (isAsyncCallee) {\n return `await (${code})`;\n }\n return code;\n } else if (isCallInterface(s)) {\n // 迁移自Vue翻译器的CallInterface@toJS\n\n const { calleewholeKey, app, completeArguments } = s;\n const [, _name, , _interfaceName] = calleewholeKey.split('.');\n\n let _module: Module | Connector | undefined = getModule();\n\n function getModule(): Module | Connector | undefined {\n // 由于自定义连接器的引入,目前在 集成中心下也存在着一部分接口\n // 因此,需要额外判断,如果是自定义连接器需要拿 app.connectorDependencies 中的接口或者 app.integration 中connector下面的接口\n const isCustomConnector = s.getAncestor('Connector');\n const isInIntegration = s.getAncestor('Integration');\n if (isCustomConnector && isInIntegration) {\n return app?.integration?.connectors?.find?.((item) => item.name === _name);\n } else if (isCustomConnector && !isInIntegration) {\n return app?.connectorDependencies?.find?.((item) => item.name === _name);\n } else {\n // default\n return app?.interfaceDependencies?.find?.((item) => item.name === _name);\n }\n }\n const _interface = (_module as Module)?.interfaces?.find?.(\n (item) => item.name === _interfaceName\n );\n if (!_interface) {\n if (!s.calleeNamespace || !s.calleeName) throw new Error('调用接口为空');\n throw new Error(`${_name}下的${_interfaceName}接口未找到`);\n }\n let isSimpleBody = false; // 兼容body只有基本类型的\n const _params = (_interface as Interface).params;\n const _queries = _params.filter((item) => item.in === 'query').map((item) => item.name);\n const _headers = _params.filter((item) => item.in === 'header').map((item) => item.name);\n const _body = _params\n .filter((item) => item.in === 'body')\n .map((item) => {\n if (item.typeAnnotation.typeKind === 'primitive') {\n isSimpleBody = true;\n }\n return item.name;\n });\n const _paths = _params.filter((item) => item.in === 'path').map((item) => item.name);\n\n /** 填充参数信息 */\n const setArgumentCode = (\n args: Argument[],\n keys: string[],\n code: string,\n useKeyWord: boolean,\n useRest: boolean\n ) => {\n const filledArgs = args\n // 维持原样,暂时不过滤没有填入值的参数\n // .filter((arg) => Boolean(arg?.expression))\n .filter((arg) => keys.includes(arg.keyword));\n\n filledArgs.forEach((arg, index) => {\n const argStr = getRuntimeStr(arg, callbackBag);\n if (useRest) {\n code += ` ...${argStr}`;\n } else if (useKeyWord) {\n code += `\\n'${arg?.keyword}': ${argStr}`;\n } else {\n code += ` ${argStr}`;\n }\n\n if (index !== args.length - 1) {\n code += ', ';\n }\n });\n\n if (filledArgs.length === 0 && !useKeyWord && !useRest) {\n code += 'undefined';\n }\n\n return code;\n };\n\n let code = `await $services['_custom']['${s.calleeNamespace}.${s.calleeName}']`;\n\n const isManualErrorHandlingEnabled = s.handleError;\n const isCustomErrorMessageEnabled = !isManualErrorHandlingEnabled && !!s.errorMessage;\n const handleErrorCode = isManualErrorHandlingEnabled ? `handleError: true,` : '';\n const errorMessageCode =\n isCustomErrorMessageEnabled && s.errorMessage\n ? `errorMessage: ${logicItemToTS(s.errorMessage)},`\n : '';\n\n code += `({ config: {\\ndownload: false,\\n${errorMessageCode}${handleErrorCode} },\\nquery: {`;\n code = setArgumentCode(completeArguments, _queries, code, true, false);\n code += `}, path: {`;\n code = setArgumentCode(completeArguments, _paths, code, true, false);\n code += `}, headers: {`;\n code = setArgumentCode(completeArguments, _headers, code, true, false);\n code += `},\\n`;\n\n if (isSimpleBody) {\n code += `body: `;\n code = setArgumentCode(completeArguments, _body, code, false, false);\n } else {\n code += `body: {`;\n code = setArgumentCode(completeArguments, _body, code, false, true);\n code += '}';\n }\n\n code += '\\n})';\n // TODO wudengke 确认这个逻辑\n const typeAnnotation = (s as any).typeAnnotation || s.__TypeAnnotation;\n const needGenInitFromSchema =\n typeAnnotation && !['primitive'].includes(typeAnnotation.typeKind);\n if (needGenInitFromSchema) {\n code = `genInitFromSchema('${typeAnnotation?.sortedTypeKey}', ${code})`;\n }\n return code;\n } else if (isCallAuthInterface(s)) {\n return neverImplemented();\n } else if (isDestination(s)) {\n const destUrl = destinationToUrlExpr(s);\n // 若Destination的父级节点为BindAttribute,则只需翻译为url字符串表达式\n const urlOnly = isBindAttribute(s.parentNode);\n if (urlOnly) {\n return destUrl;\n }\n let url = '';\n url += '$destination(';\n url += destUrl;\n url += ',\"';\n url += `${s.target}`;\n url += '\")';\n function destinationToUrlExpr(s: Destination) {\n let url = '`';\n const viewArr = s.genViewArr();\n if (Array.isArray(viewArr) && viewArr.length) {\n // 和Vue不同,ReactRouter 不需要在url之前加上 frontend.prefixPath\n // FIXME wudengke 这个规则抽离到插件中\n url += `/${viewArr.join('/')}`;\n const { completeArguments } = s;\n if (completeArguments.length) {\n const node = s.viewNode;\n let logicParam: Param[] = [];\n if (node?.params) {\n logicParam = node.params;\n }\n const logicParamLength = logicParam.length;\n const args = completeArguments\n .map((arg, index) => {\n const value = getRuntimeStr(arg, callbackBag);\n let argStr = '';\n if (value && index < logicParamLength) {\n argStr += `${arg.keyword}=` + '${';\n if (value === 'undefined') {\n argStr += `null`;\n } else {\n argStr += value;\n }\n argStr += '}';\n }\n return argStr;\n })\n .filter((arg) => !!arg);\n url += `?${args.join('&')}`;\n }\n if (s.anchor) {\n const anchor = getRuntimeStr(s.anchor, callbackBag);\n if (anchor) url += `#\\${${anchor}}`;\n }\n }\n url += '`';\n return url;\n }\n return url;\n } else if (isExternalDestination(s)) {\n let code = '';\n if (s.link) {\n const url = getRuntimeStr(s.link, callbackBag);\n const urlOnly = isBindAttribute(s.parentNode);\n if (urlOnly) {\n return url;\n }\n // TODO wudengke 换成正经的CallFunction\n const calleeName = callbackBag?.resolve?.({\n kind: 'identifier',\n value: new Identifier({ name: '$link' }),\n });\n code += `${calleeName}(\\`$\\{`;\n code += `${url}`;\n code += '}';\n if (s.anchor) {\n const anchor = getRuntimeStr(s.anchor, callbackBag);\n if (anchor) code += `#\\${${anchor}}`;\n }\n code += '`,\"';\n code += `${s.target}`;\n code += '\")';\n }\n return code;\n } else if (isValidationRule(s)) {\n /**\n * 迁移自toVue\n */\n\n let code = '{';\n // 兼容旧的简写模式\n if (s.calleeName && s.calleeName.includes('(')) {\n return `'${s.calleeName}'`;\n } else if (s.calleeName === 'unique') {\n code += `validate: 'excluded',`;\n } else if (s.calleeName === 'confirmed') {\n code += `validate: 'is',`;\n } else {\n code += `validate: '${s.calleeName}',`;\n }\n if (s.arguments.length) {\n let args = '[';\n s.arguments?.forEach((arg, index) => {\n args += getRuntimeStr(arg, callbackBag);\n if (index !== s.arguments?.length - 1) args += ', ';\n });\n args += ']';\n code += `args: ${args} ,`;\n }\n if (s.errorMessage) {\n code += `message: ${getRuntimeStr(s.errorMessage, callbackBag)},`;\n } else {\n let defaultError = defaultErrorMessageDict[s.calleeName] ?? '';\n let index = 0;\n while (defaultError && defaultError.indexOf(`{args}`) !== -1) {\n defaultError = defaultError.replace(\n `{args}`,\n `\\${${getRuntimeStr(s.arguments[index], callbackBag)}}`\n );\n index++;\n }\n // const itemTitle = (s?.parentNode as any)?.parentNode?.bindAttrs?.find((item: BindAttribute) => item.name === 'label');\n // let labelName;\n // if (itemTitle?.expression) {\n // labelName = `\\${${itemTitle?.expression?.toVue()}}`;\n // } else {\n // labelName = itemTitle?.value || '表单项';\n // }\n // defaultError = defaultError && defaultError.replace(`{label}`, labelName);\n if (defaultError?.includes(`{label}`)) {\n return todo();\n }\n if (s.frontend?.i18nInfo?.enabled) {\n defaultError = '$' + `{$i18n.t('${s.i18nKeyPrefix}${s.calleeName}')}`;\n }\n code += `message: \\`${defaultError}\\`,`;\n }\n code += `trigger: 'input+blur'`;\n if (['required', 'filled', 'notEmpty'].includes(s.calleeName)) {\n code += ',required: true';\n }\n code += '}';\n return code;\n } else if (isArgument(s)) {\n let code = '';\n if (s.expression) {\n const resultCode = getRuntimeStr(s.expression, callbackBag);\n code += resultCode;\n } else {\n code += 'undefined';\n }\n return s.spread ? `...${code}` : `${code}`;\n } else if (isAnchor(s)) {\n if (s.expression) {\n return getRuntimeStr(s.expression, callbackBag);\n } else {\n return '';\n }\n } else if (isJSBlock(s)) {\n return s.code;\n } else if (isJavaLogic(s)) {\n return neverImplemented();\n } else if (isBlock(s)) {\n const items = s.logicItems.map((x) => getRuntimeStr(x, callbackBag)).join('\\n');\n return `{${items}}`;\n } else if (isIdentifier(s)) {\n const { namespace } = s;\n if (namespace) {\n if (s.isFrontendVariables) {\n const member = MemberExpression.from(\n {\n object: new Identifier({ name: '$frontendVariables' }),\n property: new Identifier({ name: s.name }),\n },\n s.parentNode,\n s.parentKey\n );\n return getRuntimeStr(member, callbackBag);\n } else if (s.isEnum()) {\n let enumName = s.name;\n if (namespace.startsWith('extensions.')) {\n enumName = `${namespace}.${s.name}`;\n }\n return enumName;\n } else if (namespace.endsWith('configuration.groups.custom.properties')) {\n // 配置参数\n return `\"${namespace}.${s.name}\"`;\n } else if (namespace.endsWith('logics')) {\n return `'${namespace}.${s.name}'`;\n }\n }\n return (\n callbackBag?.resolve?.({\n kind: 'identifier',\n value: s,\n }) ?? s.name\n );\n } else if (isNullLiteral(s)) {\n return `null`;\n } else if (isBooleanLiteral(s)) {\n return s.value;\n } else if (isStringLiteral(s)) {\n // 转义\n let code = ``;\n const stringCode = `${JSON.stringify(s.value)}`;\n if (s.i18nKey && s.value && s.frontend?.i18nInfo?.enabled) {\n code = `$i18n.t('${s.i18nKey}')`;\n } else if (s.i18nKey && s.getAncestor('BusinessComponent')) {\n // 业务组件的tojs比较 特殊,读不到别的信息,也不想专门传递端过来\n // 所以就判断 真正渲染的时候,当前这个端的国际化开关是否开启了,开了就读国际化文本,没开就是原来的\n code = `($global?.i18nInfo?.enabled ? $i18n.t('${s.i18nKey}') : ${stringCode})`;\n } else if (typeof s.value === 'string') {\n code = stringCode;\n }\n return code;\n\n // return `${JSON.stringify(s.value)}`;\n } else if (isStringInterpolation(s)) {\n // TODO wudengke 修复window.xxxx方法,构造统一的CallFunction调用然后处理成为nasl.xxx\n if (!s.expressions.length) return `''`;\n return s.expressions\n .map((exp) => {\n const expTypeAnnotation = exp.typeAnnotation || exp.__TypeAnnotation;\n transformUnionTypeAnnotation(expTypeAnnotation, s.app);\n const { sortedTypeKey } = transfromMetadataType(expTypeAnnotation, s.app);\n return `nasl.util.ToString('${sortedTypeKey}', ${getRuntimeStr(exp, callbackBag)})`;\n })\n .join(' + ');\n } else if (isNumericLiteral(s)) {\n return s.value;\n } else if (isBinaryExpression(s)) {\n // FIXME wudengke 二元表达式翻译行为和Vue保持一致\n return `${getRuntimeStr(s.left, callbackBag)}${s.operator}${getRuntimeStr(\n s.right,\n callbackBag\n )}`;\n } else if (isMatchCase(s)) {\n const p = s.parentNode;\n if (!isMatch(p)) {\n throw new Error('MatchCase的父节点非Match');\n }\n let code = '';\n if (Array.isArray(s.patterns)) {\n const patternStrArr = s.patterns.map((pattern) => {\n if (isTypeAnnotation(pattern)) {\n return `window.$isInstanceOf(${getRuntimeStr(p.expression, callbackBag)}, '${\n pattern.sortedTypeKey\n }')`;\n } else {\n return `window.$global.isEqual(${getRuntimeStr(\n p.expression,\n callbackBag\n )}, ${getRuntimeStr(pattern, callbackBag)})`;\n }\n });\n const patternStr = patternStrArr.join('||');\n const length = p.cases.length;\n if (length > 1) {\n const index = p.cases.indexOf(s);\n if (index === -1) {\n throw new Error('无法在Match中找到此MatchCase');\n }\n if (index === 0) {\n code = `if (${patternStr}) {\\n`;\n } else if (index !== length - 1) {\n code = `else if (${patternStr}) {\\n`;\n } else {\n code += 'else {\\n';\n }\n }\n if (Array.isArray(s.body)) {\n s.body.forEach((logicItem, bodyIndex) => {\n if (\n (s.parentNode as any).isExpression &&\n bodyIndex === s.body.length - 1 &&\n logicItem.concept !== 'Abort'\n ) {\n code += `return `;\n }\n code += `${getRuntimeStr(logicItem, callbackBag)}\\n`;\n });\n }\n if (length > 1) {\n code += '}\\n';\n }\n }\n return code;\n } else if (isMatch(s)) {\n let code = '';\n const ancestorLogic = s.getAncestor('Logic');\n if (s.isExpression || !ancestorLogic) {\n if (ancestorLogic) {\n code += 'await (async () => {\\n';\n } else {\n code += '(() => {\\n';\n }\n }\n if (s.expression && Array.isArray(s.cases)) {\n s.cases.forEach((item, index) => {\n code += getRuntimeStr(item, callbackBag);\n });\n }\n if (s.isExpression || !ancestorLogic) {\n code += '})()';\n }\n return code;\n } else if (isUnaryExpression(s)) {\n const arg = getRuntimeStr(s.argument, callbackBag);\n if (s.operator === 'isNull') {\n return arg;\n } else {\n return `!(${arg})`;\n }\n } else if (isMemberExpression(s)) {\n // 处理从enums上取值的情形\n if (isIdentifier(s.object) && s.object.isEnum() && isIdentifier(s.property)) {\n return getRuntimeStr(new StringLiteral({ value: s.property.name }), callbackBag);\n }\n const optional = callbackBag?.shouldInsertOptional === false ? '' : '?';\n return `${getRuntimeStr(s.object, callbackBag)}${optional}.${getRuntimeStr(s.property)}`;\n } else if (isUnparsed(s)) {\n return s.code;\n } else if (isNew(s)) {\n // 抽象类,无翻译\n return '';\n } else if (isNewComposite(s)) {\n // 迁移自Vue翻译\n let code = '';\n const { typeAnnotation } = s;\n const leftTopIndex = s.assignmentLines.findIndex(\n ({ leftIndex }) => leftIndex[1] === undefined\n );\n if (!s.typeAnnotation) {\n return '';\n }\n // 祖先逻辑\n const ancestorLogic = s.getAncestor('Logic');\n if (ancestorLogic) {\n code += 'await (async () => { \\n';\n } else {\n code += '(() => { \\n';\n }\n if (leftTopIndex !== -1) {\n const { rightIndex } = s.assignmentLines[leftTopIndex];\n const obj =\n rightIndex[1] !== undefined\n ? s.rights[rightIndex[0]].members[rightIndex[1]]\n : s.rights[rightIndex[0]].expression;\n code += `return ${getRuntimeStr(obj, callbackBag)};\\n`;\n } else if (typeAnnotation && typeAnnotation.typeKind !== 'anonymousStructure') {\n code += `const obj = genInitFromSchema('${\n typeAnnotation.sortedTypeKey\n }', nasl.util.New(${typeAnnotation.toJS()}));\\n`;\n const rightMap = new Map();\n s.assignmentLines.forEach(({ leftIndex, rightIndex }) => {\n const rightIndexJson = JSON.stringify(rightIndex);\n if (rightMap.has(rightIndexJson)) {\n rightMap.set(rightIndexJson, [...rightMap.get(rightIndexJson), leftIndex]);\n } else {\n rightMap.set(rightIndexJson, [leftIndex]);\n }\n });\n rightMap.forEach((leftIndexs, rightIndexJson) => {\n const rightIndex = JSON.parse(rightIndexJson) || [];\n const leftItems = leftIndexs.map(\n (leftIndex: Array<number>) => s.properties[leftIndex[1]]\n );\n const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];\n const rightItem =\n rightSecond !== undefined\n ? s.rights[rightFirst].members[rightSecond]\n : s.rights[rightFirst].expression;\n leftItems.forEach((leftItem: Identifier) => {\n code += `obj.${leftItem.name} = `;\n });\n code += `${getRuntimeStr(rightItem, callbackBag)}`;\n code += ';\\n';\n });\n code += 'return obj;\\n';\n } else {\n code += `const obj = {};\\n`;\n s.properties.forEach((property) => {\n code += `obj.${property.name} = null;\\n`;\n });\n const rightMap = new Map();\n s.assignmentLines.forEach(({ leftIndex, rightIndex }) => {\n const rightIndexJson = JSON.stringify(rightIndex);\n if (rightMap.has(rightIndexJson)) {\n rightMap.set(rightIndexJson, [...rightMap.get(rightIndexJson), leftIndex]);\n } else {\n rightMap.set(rightIndexJson, [leftIndex]);\n }\n });\n rightMap.forEach((leftIndexs, rightIndexJson) => {\n const rightIndex = JSON.parse(rightIndexJson) || [];\n const leftItems = leftIndexs.map(\n (leftIndex: Array<number>) => s.properties[leftIndex[1]]\n );\n const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];\n const rightItem =\n rightSecond !== undefined\n ? s.rights[rightFirst].members[rightSecond]\n : s.rights[rightFirst].expression;\n leftItems.forEach((leftItem: Identifier) => {\n code += `obj.${leftItem.name} = `;\n });\n code += `${getRuntimeStr(rightItem, callbackBag)}`;\n code += ';\\n';\n });\n code += 'return obj;\\n';\n }\n code += '})()';\n return code;\n } else if (isNewList(s)) {\n let code = '';\n if (s.getAncestor?.('Logic')) {\n code += 'await (async () => { \\n';\n } else {\n code += '(() => { \\n';\n }\n code += 'const arr = [\\n';\n s.items.forEach((item, index) => {\n code += getRuntimeStr(item, callbackBag);\n if (index + 1 < s.items.length) code += ', ';\n });\n code += '\\n];\\n';\n code += `return arr;\\n`;\n code += '})()';\n return code;\n } else if (isNewMap(s)) {\n let code = '';\n if (s.getAncestor?.('Logic')) {\n code += 'await (async () => { \\n';\n } else {\n code += '(() => { \\n';\n }\n code += 'const obj = {};\\n';\n code += 'let k;\\n';\n s.keys.forEach((item, index) => {\n const key = item;\n const value = s.values[index];\n code += `k = `;\n code += `${key ? getRuntimeStr(key, callbackBag) : undefined};\\n`;\n code += 'obj[k] = ';\n code += `${value ? getRuntimeStr(value, callbackBag) : undefined};\\n`;\n });\n code += `return obj;\\n`;\n code += '})()';\n return code;\n } else if (isCallEvent(s)) {\n const { completeArguments = [] } = s;\n let code = '';\n code += `props?.on${capitalizeFirstLetter(s.calleeName)}({\\n`;\n if (Array.isArray(completeArguments) && completeArguments.length) {\n const eventNode = s.getCallNode();\n const eventParams = eventNode?.params;\n completeArguments.forEach((arg, index) => {\n let argStr = getRuntimeStr(arg, callbackBag);\n const defaultValue = eventParams?.[index]?.defaultValue;\n if (defaultValue) {\n const paramDefaultValue = getRuntimeStr(defaultValue, callbackBag);\n if (paramDefaultValue) {\n argStr = `${argStr} !== undefined ? ${argStr} : ${paramDefaultValue}`;\n }\n }\n code += `${arg.keyword}: ${argStr}`;\n if (index !== completeArguments?.length - 1) {\n code += ', ';\n }\n });\n }\n code += '\\n})';\n return code;\n } else if (isCallQueryComponent(s)) {\n return neverImplemented();\n } else if (isQueryFromExpression(s)) {\n return neverImplemented();\n } else if (isQueryJoinExpression(s)) {\n return neverImplemented();\n } else if (isQueryFieldExpression(s)) {\n return neverImplemented();\n } else if (isQueryAggregateExpression(s)) {\n return neverImplemented();\n } else if (isQueryOrderByExpression(s)) {\n return neverImplemented();\n } else if (isQueryGroupByExpression(s)) {\n return neverImplemented();\n } else if (isQuerySelectExpression(s)) {\n return neverImplemented();\n } else if (isQueryLimitExpression(s)) {\n return neverImplemented();\n } else if (isSqlQueryComponent(s)) {\n return neverImplemented();\n } else if (isOqlQueryComponent(s)) {\n return neverImplemented();\n } else if (isProcessOutcome(s)) {\n return neverImplemented();\n } else if (isAssignee(s)) {\n return neverImplemented();\n } else if (isProcessOutcomes(s)) {\n return neverImplemented();\n } else {\n // 未被处理的情形\n if (s) {\n logger.warn(`Concept:${s.concept} 未被处理,回退至默认翻译,请报告此错误`);\n return s.toJS();\n } else {\n logger.error('遇到空节点,请报告此错误');\n return '(undefined)';\n }\n }\n }\n}\n\nexport type IdentifierResolver = (id: Identifier) => string | undefined;\nexport type IdentifierNameResolver = (id: string) => string | undefined;\n\nexport const javaScriptCodeGenPlugin = makePlugin({\n name: 'javaScriptCodeGen',\n functions: {\n printSyntaxNode(\n expr: HasRuntimeSemantics,\n callbackBag?: Partial<javaScriptCodeGenCallBackBag>\n ) {\n return getRuntimeStr(expr, callbackBag);\n },\n },\n});\n\n/**\n * JavaScript 代码生成插件\n *\n * @public\n */\n@injectable()\nexport class JavaScriptCodegenPlugin implements JavaScriptDomain.JavaScriptCodegen {\n printSyntaxNode(expr: HasRuntimeSemantics, callbackBag?: Partial<javaScriptCodeGenCallBackBag>) {\n return getRuntimeStr(expr, callbackBag);\n }\n}\n","export const defaultErrorMessageDict: Record<string, string | undefined> = {\n \"required\": \"表单项不得为空\",\n \"filled\": \"表单项不得为空\",\n \"notEmpty\": \"表单项不得为空\",\n \"empty\": \"表单项必须为空\",\n \"minLength\": \"不得少于{args}个字符\",\n \"maxLength\": \"不得超过{args}个字符\",\n \"rangeLength\": \"请输入{args}-{args}个字符\",\n \"min\": \"不能小于{args}\",\n \"max\": \"不能大于{args}\",\n \"range\": \"范围在{args}-{args}之间\",\n \"pattern\": \"表单项格式不正确\",\n \"is\": \"必须与{args}相同\",\n \"isNot\": \"必须与{args}不同\",\n \"equals\": \"必须等于{args}\",\n \"notEquals\": \"必须不等于{args}\",\n \"confirmed\": \"两次输入的密码不一致\",\n \"includes\": \"必须包含{args}\",\n \"excludes\": \"不能包含{args}\",\n \"included\": \"必须为{args}中的值\",\n \"excluded\": \"不能为{args}中的值\",\n \"unique\": \"该表单项已经存在\",\n \"noDuplicates\": \"不能出现重复项\",\n \"string\": \"请输入字符串\",\n \"number\": \"请输入数字\",\n \"numeric\": \"请输入数字\",\n \"integer\": \"请输入整数\",\n \"decimal\": \"请输入正确格式的小数\",\n \"boolean\": \"必须为布尔类型\",\n \"function\": \"必须为函数\",\n \"object\": \"必须为对象\",\n \"plainObject\": \"必须为简单对象\",\n \"array\": \"必须为数组\",\n \"alpha\": \"请输入字母\",\n \"alphaNum\": \"请输入字母或数字\",\n \"alphaDash\": \"请输入字母或下划线\",\n \"alphaNumDash\": \"请输入字母、数字或下划线\",\n \"alphaSpaces\": \"以字母或空格组成\",\n \"lowerCase\": \"不能出现大写字母\",\n \"upperCase\": \"不能出现小写字母\",\n \"^az\": \"以小写字母开头\",\n \"^az09\": \"以小写字母或数字开头\",\n \"^az09_\": \"以小写字母、数字或下划线开头\",\n \"^azAZ\": \"以字母开头\",\n \"^azAZ09\": \"以字母或数字开头\",\n \"^azAZ09_\": \"以字母、数字或下划线开头\",\n \"az09$\": \"以小写字母或数字结尾\",\n \"azAZ09$\": \"以字母或数字结尾\",\n \"^09$\": \"以数字组成\",\n \"^az09$\": \"以小写字母或数字组成\",\n \"^az09-$\": \"以小写字母、数字或中划线组成\",\n \"^az09-.$\": \"以小写字母、数字、'-'或'.'组成\",\n \"^azAZ09$\": \"以字母或数字组成\",\n \"^azAZ09-$\": \"以字母、数字或'-'组成\",\n \"^az09-_$\": \"以小写字母、数字、'-'或'_'组成\",\n \"^azAZ09_$\": \"以字母、数字或'_'组成\",\n \"^azAZ09-_$\": \"以字母、数字、'-'或'_'组成\",\n \"without--\": \"不能连续出现中划线\",\n \"without__\": \"不能连续出现下划线\",\n \"email\": \"请输入正确的邮箱\",\n \"ip\": \"请输入正确的 IP\",\n \"ipRange\": \"请输入正确的 IP 段\",\n \"port\": \"请输入正确的端口\",\n \"url\": \"请输入正确的 URL\",\n \"macAddress\": \"请输入正确的 MAC 地址\",\n \"md5\": \"请输入正确的 MD5\",\n \"ascii\": \"必须为 ASCII\",\n \"base32\": \"必须为 base32 编码\",\n \"base64\": \"必须为 base64 编码\",\n \"byteLength\": \"字节长度不在指定范围内\",\n \"dataURI\": \"必须为 DataURI 编码\",\n \"magnetURI\": \"必须为 MagnetURI 编码\",\n \"divisibleBy\": \"必须被{args}整除\",\n \"fullWidth\": \"必须输入全角字符\",\n \"halfWidth\": \"必须输入半角字符\",\n \"hash\": \"哈希编码不符合{args}算法\",\n \"hexColor\": \"请输入合法的十六进制颜色值\",\n \"hex\": \"请输入十六进制数\",\n \"identityCard\": \"请输入合法的身份证号码\",\n \"creditCard\": \"请输入合法的信用卡号\",\n \"fqdn\": \"请输入合法的全限定域名\",\n \"ipOrFQDN\": \"请输入一个合法 IP 或全限定域名\",\n \"isbn\": \"必须为合法的国际标准书号\",\n \"issn\": \"必须为合法的国际标准连续出版物编号\",\n \"isin\": \"必须为合法的国际证券识别码\",\n \"iso8601\": \"必须为合法的 ISO8601 日期格式\",\n \"rfc3339\": \"必须为合法的 RFC3339 日期格式\",\n \"iso31661Alpha2\": \"必须为合法的 ISO 3166-1 Alpha-2 国家代码\",\n \"iso31661Alpha3\": \"必须为合法的 ISO 3166-1 Alpha-3 国家代码\",\n \"json\": \"必须为 JSON 格式字符串\",\n \"jwt\": \"必须为合法的 JSON Web Token\",\n \"latLong\": \"请输入合法的经纬度坐标,如 (-17.738223, 85.605469)\",\n \"mobile\": \"请输入合法的手机号码\",\n \"mongoId\": \"请输入合法的 MongoDB 对象 ID\",\n \"postalCode\": \"请输入合法的邮政编码\",\n \"uuid\": \"请输入合法的 UUID\",\n \"chinese\": \"请输入中文内容\"\n}\n","import {\n type App, BaseNode,\n type FrontendType,\n type CallLogic,\n type SyntaxNode,\n type Logic,\n asserts,\n} from '@lcap/nasl-concepts';\n\nclass LogNode extends BaseNode {\n\n get concept(){\n return 'LogNode'\n };\n __actualNode: CallLogic;\n __path: string;\n __logic: Logic;\n\n constructor(source: CallLogic) {\n super();\n if (source) {\n this.__path = source.nodePath;\n this.__logic = source.getAncestor?.('Logic') as Logic;\n this.__actualNode = source;\n }\n }\n\n toJS() {\n if (this.__actualNode) {\n let code = this.__actualNode.toJS();\n const message = this.__actualNode.arguments?.[0]?.toJS();\n const calleeName = this.__actualNode.calleeName;\n code += `\\nthis.$logReport({\n logicName: '${this.__logic?.name}',\n path: '${this.__path}',\n level: '${calleeName}',\n message: ${message},\n });`;\n return code;\n }\n return '';\n }\n\n getActualNode() {\n return this.__actualNode;\n }\n}\n\n/**\n * 日志节点\n * @param node\n * @returns\n */\nfunction isCallLogicALogNode(node: SyntaxNode) {\n return asserts.isCallLogic(node)\n && node.calleeNamespace === 'nasl.logging'\n && ['ERROR', 'WARN', 'DEBUG', 'INFO'].includes(node.calleeName);\n}\n\nexport function isLogNode(node: BaseNode): node is LogNode {\n return node.concept === 'LogNode';\n}\n\nexport const genLogs = (app: App) => {\n app.frontendTypes.forEach((frontendType: FrontendType) => {\n frontendType.traverseStrictChildren((node: SyntaxNode) => {\n if (isCallLogicALogNode(node)) {\n const { parentNode, parentKey } = node;\n const logNode = new LogNode(node as CallLogic);\n logNode.parentNode = parentNode;\n if (Array.isArray(parentNode[parentKey as keyof SyntaxNode])) {\n const index = parentNode[parentKey as keyof SyntaxNode].indexOf(node);\n if (index !== -1) {\n parentNode[parentKey as keyof SyntaxNode][index] = logNode;\n }\n } else {\n (parentNode as any)[parentKey] = logNode;\n }\n }\n });\n });\n};\n\nexport const clearLogs = (app: App) => {\n app.frontendTypes.forEach((frontendType: FrontendType) => {\n frontendType.traverseChildren((node: BaseNode) => {\n if (node instanceof LogNode) {\n const actualNode = node.getActualNode();\n if (isCallLogicALogNode(actualNode)) {\n const { parentNode, parentKey } = actualNode;\n if (Array.isArray(parentNode[parentKey as keyof SyntaxNode])) {\n const index = parentNode[parentKey as keyof SyntaxNode].indexOf(node);\n if (index !== -1) {\n parentNode[parentKey as keyof SyntaxNode][index] = actualNode;\n }\n } else {\n (parentNode as any)[parentKey] = actualNode;\n }\n }\n }\n });\n });\n};\n\nexport const commonlogReportCode = `\nconst $logReport = ({\n level,\n path,\n logicName,\n message,\n}) => {\n try {\n fetch('api/system/logReport', {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n time: '' + Date.now(),\n level,\n path,\n logicName,\n message,\n }),\n });\n } catch(err) {}\n};`;\n\n/**\n * 生成 日志上报 代码\n * @param param0\n * @returns\n */\nexport const logReportCode = () => {\n return `\n // 日志上报\n Vue.prototype.$logReport = ({\n level,\n path,\n logicName,\n message,\n }) => {\n try {\n fetch('api/system/logReport', {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n time: '' + Date.now(),\n level,\n path,\n logicName,\n message,\n }),\n });\n } catch(err) {}\n };`;\n};\n","import { Frontend } from '@lcap/nasl-concepts';\nimport { makePlugin } from '../../utils/plugin';\nimport { ReactFileDescription } from '../react/react-codegen-plugin';\n\nexport const i18nPlugin = makePlugin({\n name: 'i18nPlugin',\n functions: {\n genI18nInfo(frontend: Frontend) {\n let fileI18nInfo: any = {\n enabled: false,\n locale: 'zh-CN',\n messages: {},\n I18nList: [],\n };\n if (frontend?.i18nInfo?.enabled) {\n const naslI18nInfo = frontend.i18nInfo?.toJSON();\n // 因为内部还有对象嵌套,先序列化一下\n fileI18nInfo = JSON.parse(JSON.stringify(naslI18nInfo));\n fileI18nInfo.messages = fileI18nInfo.messageMap;\n delete fileI18nInfo.messageMap;\n const i18nMessages: any = fileI18nInfo.messages || {};\n // 发布前公布下最新文本翻译\n const frontEndI18nNodes = frontend.getI18nKeyNodes();\n const frontEndI18nMap: any = {};\n frontEndI18nNodes.forEach((node) => {\n frontEndI18nMap[node['i18nKey']] = node.value;\n });\n // 如果其他语言内容这里的没有设置,就复用中文的翻译\n const infoZhMessages = i18nMessages['zh-CN'];\n const AllZhMessages = { ...infoZhMessages, ...frontEndI18nMap };\n \n // 中文列表直接覆盖\n i18nMessages['zh-CN'] = AllZhMessages;\n \n // 遍历所有语言,然后把 别的语言没有的文本,赋值为中文的文本\n // 循环遍历messages,中文的message 赋值到别的语言中\n Object.keys(i18nMessages).forEach((key) => {\n if (key !== 'zh-CN') {\n const i18nMessage = i18nMessages[key];\n Object.keys(AllZhMessages).forEach((zhKey) => {\n // 如果发布的时候国际化节点存储的内容和文本的不一样,其余语言的内容都要替换成文本的内容\n // 前提是这个是nasl节点的内容\n if (frontEndI18nMap[zhKey] && infoZhMessages[zhKey] !== frontEndI18nMap[zhKey]) {\n i18nMessage[zhKey] = AllZhMessages[zhKey];\n } else if (!i18nMessage[zhKey]) {\n // 如果单纯的没配置,就用主语言的\n i18nMessage[zhKey] = AllZhMessages[zhKey];\n }\n });\n }\n });\n fileI18nInfo.I18nList = frontend.getCurrentLanguageList();\n }\n return fileI18nInfo;\n },\n __hooksDefinitions(): ReactFileDescription {\n return new ReactFileDescription(\n '',\n [],\n [],\n [\n `export const useI18n = ()=>{\n return window.$i18n ?? {};\n }\n export const useI18nInfo = ()=>{\n return window.appInfo.i18nInfo ?? {};\n }`,\n ]\n );\n },\n },\n});","import { App, Frontend } from '@lcap/nasl-concepts';\nimport { makePlugin } from '../../utils/plugin';\nimport { i18nPlugin } from './i18n-plugin';\nimport { CommonAppConfig } from '../../types/config';\nimport { Dict } from '../../types/common';\n\n// TODO wudengke 确认是否需要文件下面这些被注释掉的字段\n\nexport type BasePlatformConfig = Omit<PlatformConfig, 'authResourcePaths' | 'baseResourcePaths'>;\n\nexport interface PlatformConfig {\n appConfig: AppConfig;\n dnsAddr: string;\n tenant: string;\n env: string;\n hasUserCenter: boolean;\n hasAuth: boolean;\n authResourcePaths: string[];\n baseResourcePaths: string[];\n basePath: string;\n sysPrefixPath: string;\n frontendName: string;\n isPreviewFe: boolean;\n}\n\ninterface AppConfig {\n id: string;\n project: string;\n domainName: string;\n extendedConfig?: any;\n envConfig: {\n lowcodeDomain: string;\n };\n tenant: string;\n i18nInfo: I18nInfo;\n nuimsDomain: string | undefined;\n lowcodeDomain: string | undefined;\n envNuimsDomain: string | undefined;\n tenantType: string;\n tenantLevel: string;\n documentTitle: string;\n basePath: string;\n sysPrefixPath: string;\n frontendName: string;\n rootViewData: undefined;\n appTimeZone: string | undefined,\n}\n\ninterface I18nInfo {\n enabled: boolean;\n locale: string;\n messages: Dict;\n I18nList: unknown[];\n}\n\nexport const metadataPlugin = makePlugin({\n name: 'MetadataPlugin',\n functions: {\n makeBasePlatformConfig(\n app: Pick<App, 'name' | 'dnsAddr' | 'hasUserCenter' | 'hasAuth' | 'sysPrefixPath' | 'id' | 'appTimeZone' >,\n frontend: Frontend,\n config: CommonAppConfig\n ): BasePlatformConfig {\n const configLowcodeDomain = config?.lowcodeDomain;\n const fnNuimsDomain = config?.envNuimsDomain?.[config?.env] || config?.nuimsDomain;\n const fnLowcodeDomain =\n config?.envLcpDomain?.[config?.env]?.lcpDomain || config?.lowcodeDomain;\n return {\n appConfig: {\n id: app.id,\n project: app.name,\n domainName: app.name,\n nuimsDomain: fnNuimsDomain,\n lowcodeDomain: configLowcodeDomain,\n envNuimsDomain: config.envNuimsDomain,\n tenantType: config.tenantType,\n tenantLevel: config.tenantLevel,\n extendedConfig: config.extendedConfig,\n envConfig: {\n lowcodeDomain: fnLowcodeDomain,\n },\n tenant: config.tenant,\n documentTitle: frontend.documentTitle!,\n basePath: frontend.prefixPath,\n frontendName: frontend.name,\n sysPrefixPath: app.sysPrefixPath,\n appTimeZone: app?.appTimeZone,\n i18nInfo: i18nPlugin.functions.genI18nInfo(frontend),\n rootViewData: undefined\n },\n dnsAddr: app.dnsAddr!,\n tenant: config.tenant,\n env: config.env,\n hasUserCenter: app.hasUserCenter,\n hasAuth: app.hasAuth,\n basePath: frontend.prefixPath,\n sysPrefixPath: app.sysPrefixPath,\n frontendName: frontend.name,\n isPreviewFe: !!config.isPreviewFe,\n };\n },\n },\n});\n","export const materials = {\n framework: {\n version: '2.0.0',\n core: '@lcap/basic-template',\n pc: [\n {\n frameworkKind: 'vue2',\n name: '@lcap/pc-template',\n version: '2.0.0',\n },\n {\n frameworkKind: 'react',\n name: '@lcap/pc-template-react',\n version: '2.0.0',\n },\n {\n frameworkKind: 'vue3',\n name: '@lcap/pc-template-vue3',\n version: '2.0.0',\n }\n ],\n h5: [\n {\n frameworkKind: 'vue2',\n name: '@lcap/mobile-template',\n version: '2.0.0',\n },\n {\n frameworkKind: 'react',\n name: '@lcap/mobile-template-react',\n version: '2.0.0',\n },\n {\n frameworkKind: 'vue3',\n name: '@lcap/mobile-template-vue3',\n version: '2.0.0',\n }\n ]\n },\n ui: {\n pc: [\n {\n frameworkKind: 'vue2',\n frameworkVersion: 'vue@2.6.12',\n libName: 'CloudUI',\n useFakeRoot: '0',\n name: '@lcap/pc-ui',\n version: '1.4.0',\n },\n {\n frameworkKind: 'vue2',\n frameworkVersion: 'vue@2.6.12',\n libName: 'ElementUI',\n useFakeRoot: '0',\n name: '@lcap/element-ui',\n version: '1.4.0',\n },\n {\n frameworkKind: 'react',\n frameworkVersion: 'react@18.2.0',\n libName: 'antd',\n name: '@lcap/pc-react-ui',\n version: '1.4.0',\n },\n {\n frameworkKind: 'vue3',\n frameworkVersion: 'vue@3.5.13',\n libName: 'ElementPlus',\n name: '@lcap/element-plus',\n version: '1.0.0',\n }\n ],\n h5: [\n {\n frameworkKind: 'vue2',\n frameworkVersion: 'vue@2.6.12',\n name: '@lcap/mobile-ui',\n libName: 'vant',\n useFakeRoot: '0',\n version: '1.4.0',\n },\n {\n frameworkKind: 'vue3',\n frameworkVersion: 'vue@3.5.13',\n name: '@lcap/vant',\n libName: 'LcapVant',\n version: '1.0.0-beta.1',\n }\n ]\n },\n mini: {\n taro: [\n {\n frameworkKind: 'vue2',\n frameworkVersion: 'vue@2.6.12',\n name: '@lcap/taro-mini-vue2',\n version: '0.0.1',\n }\n ]\n }\n};\n","import { Package } from '../../types/ir';\nimport { materials as materialConfigObject } from './material.config';\n\nconst reactUi = materialConfigObject.ui.pc.find((x) => x.frameworkKind === 'react');\nconst vue3Ui = materialConfigObject.ui.pc.find((x) => x.frameworkKind === 'vue3');\n// 约定coreVresion为materialConfigObject.framework.version\nconst coreVersion = materialConfigObject.framework.version;\n\n/**\n * @deprecated material.config.js应当需要前端传过来。翻译器中通过插件来取值。\n */\nexport function getPredefinedMaterialConfig() {\n return materialConfigObject;\n}\n\n// TODO: material.config.js应当需要前端传过来。翻译器中通过插件来取值。\nexport function getPredefinedLibConstants(): {\n reactUI: Package;\n vue3Ui: Package;\n basicTemplate: { version: string };\n} {\n if (!reactUi || !vue3Ui) {\n throw new Error('not found');\n }\n if (reactUi.name !== '@lcap/pc-react-ui') {\n throw new Error('cannot find @lcap/pc-react-ui in material.config.js');\n }\n return {\n reactUI: {\n kind: 'standard',\n name: reactUi.name,\n version: reactUi.version,\n },\n vue3Ui: {\n kind: 'standard',\n name: vue3Ui.name,\n version: vue3Ui.version,\n },\n basicTemplate: {\n version: coreVersion,\n },\n };\n}\n\nexport const getPredefinedMaterialByTags = (() => {\n const materialConfig = getPredefinedMaterialConfig();\n // 拍平加tag\n let allMaterials = [];\n\n allMaterials.push({\n name: materialConfig.framework.core,\n version: materialConfig.framework.version,\n tags: ['template', 'core'],\n });\n\n materialConfig.framework.pc.forEach((item) => {\n allMaterials.push({\n ...item,\n tags: ['template', 'pc', item.frameworkKind],\n });\n });\n\n materialConfig.framework.h5.forEach((item) => {\n allMaterials.push({\n ...item,\n tags: ['template', 'h5', item.frameworkKind],\n });\n });\n\n materialConfig.ui.pc.forEach((item) => {\n allMaterials.push({\n ...item,\n tags: ['ui', 'pc', item.frameworkKind, item.libName],\n });\n });\n\n materialConfig.ui.h5.forEach((item) => {\n allMaterials.push({\n ...item,\n tags: ['ui', 'h5', item.frameworkKind, item.libName],\n });\n });\n\n return (tags: string[]) => {\n return allMaterials.find((item) => tags.every((tag) => item.tags.includes(tag)));\n };\n})();\n","import { Container, inject, injectable } from 'inversify';\nimport { App, Frontend } from '@lcap/nasl-concepts';\nimport { type JavaScriptDomain, type NASLDomain } from '../../../service-interface';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { NASLAppIR } from '../../../types/ir';\nimport { CommonAppConfig } from '../../../types/config';\nimport { ReactFileDescription } from '../../react';\nimport { isNotNil } from '../../../utils/types';\n\n/**\n * 前端入口插件\n */\n@injectable()\nexport class EntrypointPlugin\n implements\n JavaScriptDomain.FrontendApplicationDomain.EntrypointManager,\n NASLDomain.IRPreProcesser\n{\n constructor(\n @inject(ServiceMetaKind.MicroFrontendManager)\n private microFrontendManager: JavaScriptDomain.FrontendApplicationDomain.MicroFrontendManager\n ) {}\n\n preProcess(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig\n ): { app: App; frontend: Frontend; config: CommonAppConfig } {\n const isReact = app?.frontendTypes?.some((x) => {\n return x.frameworkKind === 'react';\n });\n // react 框架需要前端事件包装组件\n config.needFrontendEventWrapper = isReact;\n return { app, frontend, config };\n }\n\n generateHelperCode(): ReactFileDescription {\n const code = `\nlet root: any = null;\n\nexport function renderApp() {\n // @ts-expect-error\n const container = window.LcapMicro?.container ?? document.getElementById('app')!;\n root = ReactDOM.createRoot(container);\n // @ts-expect-error\n window.createLcapApp = renderApp;\n // @ts-expect-error\n window.appVM = {\n $destroy: unmountApp,\n };\n root.render(<App />);\n}\n\nexport function unmountApp(){\n // @ts-expect-error\n window.appVM = null;\n // @ts-expect-error\n window.createLcapApp = null;\n root?.unmount();\n root = null;\n}\n\nexport function loadAssets(){\n return renderApp();\n}\n `;\n return new ReactFileDescription(\n 'helper',\n [\n {\n from: 'react',\n import: 'React',\n },\n {\n from: 'react-dom/client',\n import: 'ReactDOM',\n },\n {\n from: '../Router',\n import: 'App',\n },\n ],\n [],\n [code],\n [{ name: 'entry' }]\n );\n }\n\n generateEntry(ir: NASLAppIR): ReactFileDescription[] {\n const entryScript = this.microFrontendManager.produceScript(ir);\n const publicPathScript = this.microFrontendManager.producePublicPathScript(ir);\n const code = `\n export function startApp(){\n if(window.LcapMicro){\n // 已经被加载于微前端环境\n renderApp();\n }else{\n const loadAssets = renderApp;\n ${entryScript};\n }\n }\n `;\n\n const imports = [\n {\n from: '../init',\n },\n {\n from: './helper',\n import: '{renderApp}',\n },\n publicPathScript\n ? {\n from: './public-path',\n }\n : undefined,\n ].filter(isNotNil);\n\n return [\n new ReactFileDescription('index', imports, [], [code], [{ name: 'entry' }]),\n this.generateHelperCode(),\n publicPathScript\n ? new ReactFileDescription('public-path', [], [], [publicPathScript], [{ name: 'entry' }])\n : undefined,\n ].filter(isNotNil) as ReactFileDescription[];\n }\n static install(c: Container) {\n c.bind(ServiceMetaKind.EntryPointManager).to(EntrypointPlugin);\n c.bind(ServiceMetaKind.IRPreProcesser).to(EntrypointPlugin);\n return c;\n }\n}\n","import '@abraham/reflection';\nimport { App, Frontend } from '@lcap/nasl-concepts';\nimport { inject, injectable, type Container } from 'inversify';\nimport {\n type Generator,\n type GeneratorInfrastructureDomain,\n type JavaScriptDomain,\n type NASLDomain,\n} from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { CommonAppConfig } from '../../types/config';\nimport {\n deserializeAppWhileKeepTypeAnnotation,\n serializeAppWithKeepTypeAnnotation,\n} from '../../utils/serialization';\nimport { NASLAppIRBuilderPlugin } from '../ir-builder-plugin';\nimport { FileSystemPlugin } from '../misc/file-system/file-system-plugin';\nimport { MicroFrontendPlugin } from '../misc/micro-frontend/micro-frontend-plugin';\nimport { OrganizedFile, ProjectOrganizerPlugin } from '../misc/project-organization-plugin';\nimport { FrontendBundlerConfigPlugin } from '../misc/frontend-bundler-config-plugin';\nimport { FrontendPerformancePlugin } from '../misc/frontend-performance-plugin';\nimport { NpmPackageJSONManagerPlugin } from '../misc/npm-package-manager-plugin';\nimport { ReactCodegenPlugin } from './react-codegen-plugin';\nimport { ReactRelatedJavaScriptCodegenPlugin } from './react-javascript-codegen-plugin';\nimport { JavaScriptCodegenPlugin } from '../language/javascript-codegen-plugin';\nimport { ReactStateManagerVanillaPlugin } from './react-state-manager-vanilla-plugin';\nimport { ReactStateManagerMobxPlugin } from './react-state-manager-mobx-plugin';\nimport { EntrypointPlugin } from '../misc/entry-point/entry-point-plugin';\nimport { ReactSlotPlugin } from './react-slot-plugin';\nimport { BundlerConfigDataPlugin } from '../misc/bundler/bundler-config-data-plugin';\nimport { RspackConfigPlugin } from '../misc/bundler/respack-config-plugin';\n\n@injectable()\nexport class ReactPresetPlugin implements Generator.NASLTranspiler {\n constructor(\n @inject(ServiceMetaKind.IRBuilder) private irBuilder: NASLDomain.IRBuilder,\n @inject(ServiceMetaKind.MicroFrontendManager)\n private microFrontendManager: JavaScriptDomain.FrontendApplicationDomain.MicroFrontendManager,\n @inject(ServiceMetaKind.FileSystemProvider)\n private fileSystemProvider: GeneratorInfrastructureDomain.FileSystemProvider,\n @inject(ServiceMetaKind.ReactCodegen)\n private reactCodeGenerator: JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactCodegen,\n @inject(NpmPackageJSONManagerPlugin)\n private npmPackageJSONManager: NpmPackageJSONManagerPlugin\n ) {}\n\n async transpile(instruction: {\n app: App;\n frontend: Frontend;\n config: CommonAppConfig;\n baseDir: string;\n }): Promise<OrganizedFile[]> {\n const appJson = serializeAppWithKeepTypeAnnotation(instruction.app);\n try {\n const app = deserializeAppWhileKeepTypeAnnotation(appJson);\n const frontend = app.findNodeByPath(instruction.frontend.nodePath) as Frontend;\n const ir = this.irBuilder.buildIR(app, frontend, instruction.config);\n const entryScript = this.microFrontendManager.produceScript(ir);\n const files = await this.reactCodeGenerator.genFiles(ir, instruction.baseDir);\n const isDebug = instruction.config.debug;\n const finalizedFiles = [\n ...files,\n // TODO wudengke 抽象为插件\n {\n path: '/client-lazyload-template.js',\n content: `\n export default function (templateParameters) {\n const { htmlWebpackPlugin } = templateParameters;\n const files = htmlWebpackPlugin.files;\n const jsAssets = files.js;\n const cssAssets = files.css;\n // 如果是debug模式,加载断点调试器\n ${\n isDebug\n ? `jsAssets.push(\n '${instruction.config.STATIC_URL}/packages/vue@2/dist/vue.min.js',\n '${\n instruction.config.STATIC_URL\n }/packages/@lcap/breakpoint-client@1.0.0/dist/index.js?time=${Date.now()}',\n );`\n : ''\n }\n const lazyLoadCommand = \\`\n \\${JSON.stringify(jsAssets)}.forEach(asset => window.LazyLoad.js(asset));\n window.LazyLoad.css(\\${JSON.stringify(cssAssets)});\n \\`;\n return \\`(function(){\n function loadAssets(){\n \\${lazyLoadCommand};\n }\n ${entryScript};\n })();\\`;\n }\n `,\n },\n ];\n\n for (const f of finalizedFiles) {\n this.fileSystemProvider.write(f.path, f.content);\n }\n return finalizedFiles;\n } catch (error) {\n throw error;\n }\n }\n static install(container: Container) {\n let c = container.createChild();\n\n // main entry\n c.bind(ServiceMetaKind.NASLTranspiler).to(ReactPresetPlugin);\n\n // basic\n c.bind(ServiceMetaKind.IRBuilder).to(NASLAppIRBuilderPlugin);\n\n // js\n c.bind(JavaScriptCodegenPlugin).toSelf();\n\n // react\n c = ReactStateManagerMobxPlugin.install(c);\n c.bind(ReactStateManagerVanillaPlugin).toSelf();\n c.bind(ServiceMetaKind.ReactJavaScriptCodePrinter).to(ReactRelatedJavaScriptCodegenPlugin);\n c.bind(ServiceMetaKind.ReactCodegen).to(ReactCodegenPlugin);\n\n // react slot\n c = ReactSlotPlugin.install(c);\n\n // misc\n c.bind(ServiceMetaKind.ProjectOrganizer).to(ProjectOrganizerPlugin);\n c.bind(ServiceMetaKind.FileSystemProvider).to(FileSystemPlugin).inSingletonScope();\n\n c = BundlerConfigDataPlugin.install(c);\n c = RspackConfigPlugin.install(c);\n c = FrontendBundlerConfigPlugin.install(c);\n c = FrontendPerformancePlugin.install(c);\n c = NpmPackageJSONManagerPlugin.install(c);\n c = MicroFrontendPlugin.install(c);\n c = EntrypointPlugin.install(c);\n return c;\n }\n}\n","import { injectable } from 'inversify';\nimport { Volume } from 'memfs';\nimport { type GeneratorInfrastructureDomain } from '../../../service-interface';\n\n/**\n * 文件系统插件\n */\n@injectable()\nexport class FileSystemPlugin implements GeneratorInfrastructureDomain.FileSystemProvider {\n private vol = new Volume();\n read(path: string): string | Buffer | undefined {\n if (this.vol.existsSync(path)) {\n return this.vol.readFileSync(path);\n }\n return undefined;\n }\n write(path: string, content: string | Buffer): void {\n this.vol.fromJSON({ [path]: content });\n }\n remove(key: string): void {\n this.vol.unlinkSync(key);\n }\n toJSON(): Record<string, string | Buffer | null> {\n return this.vol.toJSON(undefined, undefined, undefined, true);\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { type JavaScriptDomain } from '../../../service-interface';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { integrateMicroApp } from './script/microApp';\nimport { NASLAppIR } from '../../../types';\n\n/**\n * 微前端插件\n */\n@injectable()\nexport class MicroFrontendPlugin\n implements JavaScriptDomain.FrontendApplicationDomain.MicroFrontendManager\n{\n produceScript(ir: NASLAppIR): string {\n return integrateMicroApp(ir.configs.frontendDesc, ir.configs.microApp);\n }\n producePublicPathScript(ir: NASLAppIR): string | undefined {\n const framework = ir.configs.microApp?.framework;\n if (framework === 'qiankun') {\n return `\n if (window.__POWERED_BY_QIANKUN__) {\n window.__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;\n }\n `;\n } else if (framework === 'wujie') {\n return `\n if (window.__POWERED_BY_WUJIE__) {\n window.__webpack_public_path__ = window.__WUJIE_PUBLIC_PATH__;\n }\n `;\n }\n\n return undefined;\n }\n static install(c: Container) {\n c.bind(ServiceMetaKind.MicroFrontendManager).to(MicroFrontendPlugin);\n return c;\n }\n}\n","export default `\n if(window.ICESTARK && window.ICESTARK.root) {\n Object.assign(window.ICESTARK, {\n appEnter({ container, customProps }) {\n window.LcapMicro = window.LcapMicro || {};\n Object.assign(window.LcapMicro, {properties});\n\n if(window.LcapMicro.noAuthUrl && !window.LcapMicro.noAuthFn)\n window.LcapMicro.noAuthFn = () => {\n location.href = window.LcapMicro.noAuthUrl;\n };\n\n if(window.LcapMicro.loginUrl && !window.LcapMicro.loginFn)\n window.LcapMicro.loginFn = () => {\n location.href = window.LcapMicro.loginUrl;\n };\n\n if(window.LcapMicro.notFoundUrl && !window.LcapMicro.notFoundFn)\n window.LcapMicro.notFoundFn = () => {\n location.href = window.LcapMicro.notFoundUrl;\n };\n\n // 兼容 ICESTARK 旧集成方式\n if(!window.LcapMicro.loginFn)\n window.LcapMicro.loginFn = window.ICESTARK.loginFn;\n if(!window.LcapMicro.routePrefix)\n window.LcapMicro.routePrefix = window.ICESTARK.basename;\n if(!window.LcapMicro.proxyPrefix)\n window.LcapMicro.proxyPrefix = window.ICESTARK.proxyPrefix;\n\n window.LcapMicro.container = container;\n window.LcapMicro.props = customProps;\n loadAssets();\n },\n appLeave({ container }) {\n container.innerHTML = null;\n if (window.appVM) {\n window.appVM.$destroy();\n }\n document.querySelectorAll('script.lazyload').forEach((ele) => {\n ele.active = false;\n });\n },\n });\n } else {\n loadAssets();\n }\n`;\n","export default `\n window.createLcapApp = undefined;\n window.rendered = undefined;\n window.preRequest = undefined;\n window.postRequest = undefined;\n window.beforeRoute = undefined;\n window.afterRoute = undefined;\n if(window.__POWERED_BY_QIANKUN__) {\n window.LcapMicro = window.LcapMicro || {};\n Object.assign(window.LcapMicro, {properties});\n\n window[window.LcapMicro.name] = {\n bootstrap() {\n return Promise.resolve();\n },\n mount(props) {\n window.LcapMicro = window.LcapMicro || {};\n Object.assign(window.LcapMicro, {properties});\n\n if(window.LcapMicro.noAuthUrl && !window.LcapMicro.noAuthFn)\n window.LcapMicro.noAuthFn = () => {\n location.href = window.LcapMicro.noAuthUrl;\n };\n\n if(window.LcapMicro.loginUrl && !window.LcapMicro.loginFn)\n window.LcapMicro.loginFn = () => {\n location.href = window.LcapMicro.loginUrl;\n };\n\n if(window.LcapMicro.notFoundUrl && !window.LcapMicro.notFoundFn)\n window.LcapMicro.notFoundFn = () => {\n location.href = window.LcapMicro.notFoundUrl;\n };\n\n const { container } = props;\n window.LcapMicro.container = container.querySelector('#app');\n window.LcapMicro.props = props;\n if(window.createLcapApp)\n window.createLcapApp()\n else\n loadAssets();\n return Promise.resolve();\n },\n unmount({ container }) {\n window.LcapMicro.container.innerHTML = null;\n if(window.appVM){\n window.appVM.$destroy();\n }\n document.querySelectorAll('script.lazyload').forEach((ele) => {\n ele.active = false;\n })\n return Promise.resolve();\n },\n };\n } else {\n loadAssets();\n }\n`;\n","export default `\n if (window.__POWERED_BY_WUJIE__) {\n window.__WUJIE_MOUNT = () => {\n window.LcapMicro = {};\n if(window.LcapMicro.noAuthUrl && !window.LcapMicro.noAuthFn)\n window.LcapMicro.noAuthFn = () => {\n location.href = window.LcapMicro.noAuthUrl;\n };\n \n if(window.LcapMicro.loginUrl && !window.LcapMicro.loginFn)\n window.LcapMicro.loginFn = () => {\n location.href = window.LcapMicro.loginUrl;\n };\n\n if(window.LcapMicro.notFoundUrl && !window.LcapMicro.notFoundFn)\n window.LcapMicro.notFoundFn = () => {\n location.href = window.LcapMicro.notFoundUrl;\n };\n window.LcapMicro.container = document.querySelector('#app');\n window.LcapMicro.props = window.$wujie?.props;\n loadAssets();\n };\n window.__WUJIE_UNMOUNT = () => {\n window.LcapMicro.container.innerHTML = null;\n if (window.appVM) {\n window.appVM.$destroy();\n }\n document.querySelectorAll('script.lazyload').forEach((ele) => {\n ele.active = false;\n });\n };\n } else {\n loadAssets();\n }\n`;\n","// 迁移自旧代码\nimport { Frontend, MicroApp } from '@lcap/nasl-concepts';\nimport icestark from './icestark';\nimport qiankun from './qiankun';\nimport wujie from './wujie';\n\nconst frameworkOption = {\n qiankun,\n icestark,\n wujie,\n};\n\n/**\n * 获得集成微前端的脚本\n * @param frontend - 前端NASL节点\n * @returns - 返回微前端集成的脚本\n *\n * @internal\n */\nexport function integrateMicroApp(frontend: Pick<Frontend, 'basePath' | 'type'>, microApp?: MicroApp) {\n let { framework, name, routePrefix, proxyPrefix, loginUrl, noAuthUrl, notFoundUrl } = microApp || {};\n framework ||= 'icestark';\n\n if (loginUrl === `${routePrefix}${frontend.basePath}/login`) {\n loginUrl = undefined;\n }\n if (noAuthUrl === `${routePrefix}${frontend.basePath}/noAuth`) {\n noAuthUrl = undefined;\n }\n if (notFoundUrl === `${routePrefix}${frontend.basePath}/notFound`) {\n notFoundUrl = undefined;\n }\n\n const properties = JSON.stringify({\n name: name || undefined,\n routePrefix: routePrefix || undefined,\n proxyPrefix: proxyPrefix || undefined,\n loginUrl: loginUrl || undefined,\n noAuthUrl: noAuthUrl || undefined,\n notFoundUrl: notFoundUrl || undefined,\n });\n return frameworkOption[framework].replace(/\\{properties\\}/g, properties);\n}\n","import { inject, injectable } from 'inversify';\nimport { join, relative } from 'path';\nimport { type GeneratorInfrastructureDomain } from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { Logger, logging } from '../../utils/logger';\nimport { Folder, FolderPath, hasExtension as hasFileExtension } from '../../utils/path';\nimport { ensureArray } from '../../utils/types';\nimport { ImportIR, ImportIRResolver, ReactFileDescription } from '../react/react-codegen-plugin';\nimport {\n ReactRouterDefaultViewFolderName,\n ReactRouterDefaultBizComponentsFolderName,\n} from '../react/react-router-plugin';\n\nexport type OrganizedFile = { path: string; content: string; readonly organized?: unique symbol };\n\nexport type InputFile = ReactFileDescription;\n\n/**\n * 将ImportIR恒等地转换为JavaScript的import语句\n */\nconst identityImportResolver: ImportIRResolver = (s: ImportIR): string => {\n if (s.import) {\n if (s.lazy) {\n return `const ${s.import} = React.lazy(() => import('${s.from}'));`;\n }\n return `import ${s.import} from '${s.from}';`;\n }\n return `import '${s.from}';`;\n};\n\nconst logger = Logger('ProjectOrganizerPlugin');\n\n// https://vitejs.dev/config/shared-options.html#resolve-extensions\nconst ViteDefaultResolveExtensions = [\n '.mjs',\n '.js',\n '.mts',\n '.ts',\n '.jsx',\n '.tsx',\n '.json',\n] as const;\n\ntype ResolvedImport =\n | { ir: ImportIR; kind: 'absolute' }\n | { ir: ImportIR; kind: 'relative'; getRelativePathAfterMoving: () => string };\n\nfunction isIntraProjectImport(ir: ImportIR) {\n return isRelativeImport(ir) || ir.from.startsWith('/');\n}\nfunction isRelativeImport(ir: ImportIR) {\n return ir.from.startsWith('.');\n}\n\ntype WhatEverMapping = WeakMap<PlacedFile, ResolvedImport[]>;\nasync function initImport(\n config: ProjectStructureConfig\n): Promise<{ mapping: WhatEverMapping; placedFiles: PlacedFile[] }> {\n const mapping: WhatEverMapping = new WeakMap();\n const placedRegistry: Record<string, PlacedFile | null> = {};\n const placedFiles: PlacedFile[] = [];\n Object.entries(config.project).forEach(([k, v]) => {\n if (v) {\n const inputFiles = ensureArray(v);\n for (const f of inputFiles) {\n const { dir } = initFilePath(k, f);\n const source = new PlacedFile(f, dir);\n placedFiles.push(source);\n placedRegistry[source.originalAbsolutePath] = source;\n const resolvedImports = f.getImports().map((x): ResolvedImport => {\n if (isIntraProjectImport(x)) {\n const targetAbsolutePath = isRelativeImport(x) ? join(dir, x.from) : x.from;\n const ir: ResolvedImport = {\n ir: x,\n kind: 'relative',\n getRelativePathAfterMoving: () => {\n const currentDir = dir;\n const targetPath = tryToAppendExtIfNecessary() ?? targetAbsolutePath;\n logger.debug({ currentDir, targetPath });\n return `./${relative(currentDir, targetPath)}`;\n function tryToAppendExtIfNecessary() {\n if (!hasFileExtension(x.from)) {\n for (const ext of ViteDefaultResolveExtensions) {\n const temp = placedRegistry[targetAbsolutePath + ext]?.currentAbsolutePath;\n if (temp) {\n return temp;\n }\n }\n }\n return undefined;\n }\n },\n };\n return ir;\n } else {\n const obj: ResolvedImport = {\n ir: x,\n kind: 'absolute',\n };\n return obj;\n }\n });\n mapping.set(source, resolvedImports);\n }\n }\n });\n return { mapping, placedFiles };\n function decideDirForKey(key: string): FolderPath {\n const SourceFolder: Folder = { name: 'src' };\n if (key === 'views') {\n return [\n SourceFolder,\n {\n name: ReactRouterDefaultViewFolderName,\n },\n ];\n } else if (key === 'bizComponents') {\n return [\n SourceFolder,\n {\n name: ReactRouterDefaultBizComponentsFolderName,\n },\n ];\n } else {\n return [SourceFolder];\n }\n }\n\n function initFilePath(key: string, file: InputFile) {\n const rootFolderPath = decideDirForKey(key);\n file.folder = [...rootFolderPath, ...(file.folder ?? [])];\n const dir = file.getFolderPath() ?? '';\n const path = join(dir, file.fileNameWithExt);\n return { path, dir };\n }\n}\n\n/**\n * 项目结构配置\n */\nexport type ProjectStructureConfig = {\n baseDir: string;\n project: Record<string, InputFile | InputFile[]>;\n importIRResolver?: (i: ImportIR) => string;\n};\n\n/**\n * 已经被放置在文件系统中的文件\n */\nexport class PlacedFile {\n constructor(public readonly file: InputFile, private folder: string) {\n this.originalFolder = folder;\n this.currentAbsolutePath = this.originalAbsolutePath;\n }\n /**\n * 文件当前的绝对路径\n */\n currentAbsolutePath: string;\n /**\n * 文件在所有移动发生前的绝对路径\n */\n get originalAbsolutePath(): string {\n return join(this.originalFolder, this.file.fileNameWithExt);\n }\n /**\n * 文件在所有移动发生前的绝对路径\n */\n originalFolder: string;\n getFolder(): string {\n if (this.folder.endsWith('/')) {\n return this.folder;\n }\n return `${this.folder}/`;\n }\n /**\n * 移动文件到文件夹下\n */\n moveFileTo(folder: string): PlacedFile {\n this.currentAbsolutePath = new PlacedFile(this.file, folder).originalAbsolutePath;\n this.folder = folder;\n return this;\n }\n}\n\n// TODO wudengke 名字无语了\nasync function writeAllPlacedFile(\n placedMapping: WhatEverMapping,\n files: PlacedFile[],\n overwrittenImportResolver?: ImportIRResolver\n): Promise<OrganizedFile[]> {\n return Promise.all(\n files.map(async (item): Promise<OrganizedFile> => {\n const ownImportResolver = (s: ImportIR): string => {\n const newImportIR = makeNewImportIR(s);\n return overwrittenImportResolver?.(newImportIR) ?? identityImportResolver(newImportIR);\n function makeNewImportIR(s: ImportIR): ImportIR {\n const resolvedImport = placedMapping.get(item)?.find((x) => x.ir === s);\n if (resolvedImport) {\n const newImportTargetRelativePath = getResolvedImportPath(resolvedImport);\n return {\n ...s,\n from: newImportTargetRelativePath,\n };\n }\n return s;\n }\n };\n const content = await item.file.serialize(ownImportResolver);\n return {\n content,\n path: item.currentAbsolutePath,\n };\n })\n );\n function getResolvedImportPath(resolveImport: ResolvedImport): string {\n if (resolveImport.kind === 'relative') {\n return resolveImport.getRelativePathAfterMoving();\n }\n return resolveImport.ir.from;\n }\n}\n\n// TODO wudengke 这个比较简洁,用这个取代 initImport中的相关逻辑\nfunction applyDefaultProjectStructureStrategy(config: ProjectStructureConfig) {\n const placedFiles: PlacedFile[] = [];\n Object.entries(config.project).forEach(([k, v]) => {\n const inputFiles = ensureArray(v);\n if (k === 'views') {\n const placed = inputFiles.map((f) => {\n return new PlacedFile(f, join('src', 'views'));\n });\n placedFiles.push(...placed);\n } else {\n const placed = inputFiles.map((f) => {\n return new PlacedFile(f, 'src');\n });\n placedFiles.push(...placed);\n }\n });\n\n return placedFiles;\n}\n\n@injectable()\n@logging\nexport class ProjectOrganizerPlugin implements GeneratorInfrastructureDomain.ProjectOrganizer {\n constructor(\n @inject(ServiceMetaKind.FileSystemProvider)\n private fileSystemProvider: GeneratorInfrastructureDomain.FileSystemProvider\n ) {}\n async organize(config: ProjectStructureConfig): Promise<OrganizedFile[]> {\n const { mapping, placedFiles } = await initImport(config);\n await this.moveFilesAsYouWant(placedFiles);\n const files = await writeAllPlacedFile(mapping, placedFiles, config.importIRResolver);\n return files;\n }\n async moveFilesAsYouWant(placedFiles: PlacedFile[]) {\n const l = logger.child({}, { msgPrefix: '[移动文件] ' });\n for (const f of placedFiles) {\n const originalViewFolderMark = `/${ReactRouterDefaultViewFolderName}/`;\n const originalBizComponentsFolderMark = `/${ReactRouterDefaultBizComponentsFolderName}/`;\n\n if (f.originalAbsolutePath.includes(originalViewFolderMark)) {\n const to = f.getFolder().replace(originalViewFolderMark, '/pages/');\n f.moveFileTo(to);\n l.debug(`${f.originalAbsolutePath} -> ${f.currentAbsolutePath}`);\n } else if (f.originalAbsolutePath.includes(originalBizComponentsFolderMark)) {\n const to = f.getFolder().replace(originalBizComponentsFolderMark, '/components/');\n f.moveFileTo(to);\n l.debug(`${f.originalAbsolutePath} -> ${f.currentAbsolutePath}`);\n }\n }\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { ServiceMetaKind } from '../../service-metakind';\n\nexport type CompilerConfigOptions = Partial<{\n backendUrl: string;\n publicPath: string;\n aliasMapStr: string;\n}>;\n\n/**\n * 前端打包器配置插件\n * 将 backendUrl aliasMapStr publicPath 等动态信息保存到 FrontendBundlerConfigPlugin 插件中\n */\n@injectable()\nexport class FrontendBundlerConfigPlugin {\n private compilerConfig = {\n backendUrl: '',\n publicPath: '',\n aliasMapStr: '',\n };\n\n setCompilerConfig(config: CompilerConfigOptions) {\n this.compilerConfig = {\n backendUrl: config.backendUrl ?? this.compilerConfig.backendUrl,\n publicPath: config.publicPath ?? this.compilerConfig.publicPath,\n aliasMapStr: config.aliasMapStr ?? this.compilerConfig.aliasMapStr,\n };\n }\n\n getCompilerConfig() {\n return this.compilerConfig;\n }\n\n static install(c: Container) {\n c.bind(ServiceMetaKind.FrontendBundlerConfig).to(FrontendBundlerConfigPlugin).inSingletonScope();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { ServiceMetaKind } from '../../service-metakind';\n\nexport type PerformanceOptions = Partial<{ lazy: boolean; chunks: 'initial' | 'all' | 'async' }>\n\n\n/**\n * 前端制品调优插件\n * 用于外部调用来设置前端页面打包器的性能优化参数,例如页面懒加载 lazy,以及分包策略 chunks 等 \n */\n@injectable()\nexport class FrontendPerformancePlugin {\n public performanceOptions = {\n lazy: true,\n chunks: 'all',\n };\n\n setOptions(options: PerformanceOptions) {\n this.performanceOptions = {\n lazy: options.lazy ?? this.performanceOptions.lazy,\n chunks: options.chunks ?? this.performanceOptions.chunks,\n };\n }\n\n static install(c: Container) {\n c.bind(ServiceMetaKind.FrontendPerformance).to(FrontendPerformancePlugin).inSingletonScope();\n return c;\n }\n}\n","import '@abraham/reflection';\nimport { inject, injectable } from 'inversify';\nimport { type GeneratorInfrastructureDomain } from '../../../service-interface';\nimport { ServiceMetaKind } from '../../../service-metakind';\n\n/**\n * 生命周期钩子插件\n */\n@injectable()\nexport class LifeCycleHooksPlugin\n implements GeneratorInfrastructureDomain.CodeGenerationLifecycleHooks\n{\n constructor(\n @inject(ServiceMetaKind.FileSystemProvider)\n protected fileSystemProvider: GeneratorInfrastructureDomain.FileSystemProvider\n ) {}\n afterAllFilesGenerated(): void {\n // do nothing\n }\n}\n","import { GeneratorInfrastructureDomain } from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { LifeCycleHooksPlugin } from './life-cycle/life-cycle-plugin';\nimport { Logger } from '../../utils/logger';\nimport { Container, inject, injectable } from 'inversify';\nimport { merge } from 'lodash';\n\nexport type PackageJSON = Record<string, any>;\n\nconst logger = Logger('NpmPackageJSONManagerPlugin');\n\n/** */\n/**\n * package.json 定制插件\n * 用于修改 package.json 文件中的内容\n */\n@injectable()\nexport class NpmPackageJSONManagerPlugin extends LifeCycleHooksPlugin {\n constructor(\n @inject(ServiceMetaKind.FileSystemProvider)\n protected fileSystemProvider: GeneratorInfrastructureDomain.FileSystemProvider\n ) {\n super(fileSystemProvider);\n }\n\n private packageJSONPath = '/package.json';\n\n private isAfterAllFilesGenerated = false;\n\n private willMergeObject: PackageJSON = {};\n\n private readPkg(): PackageJSON | undefined {\n try {\n const pkg = this.fileSystemProvider.read(this.packageJSONPath)?.toString();\n if (pkg) {\n return JSON.parse(pkg);\n }\n } catch (error) {\n logger.error(error, '读取 package.json 文件失败');\n }\n return undefined;\n }\n\n private writePkg(pkg: PackageJSON) {\n this.fileSystemProvider.write(this.packageJSONPath, JSON.stringify(pkg, null, 2));\n }\n\n afterAllFilesGenerated(): void {\n this.isAfterAllFilesGenerated = true;\n if (Object.keys(this.willMergeObject).length > 0) {\n const pkg = this.readPkg() ?? {};\n merge(pkg, this.willMergeObject);\n this.writePkg(pkg);\n }\n }\n\n patch(obj: Record<string, any>) {\n if (!this.isAfterAllFilesGenerated) {\n merge(this.willMergeObject, obj);\n return;\n }\n const pkg = this.readPkg() ?? {};\n // recursively merge obj to pkg\n merge(pkg, obj);\n this.writePkg(pkg);\n }\n\n static install(c: Container) {\n c.bind(NpmPackageJSONManagerPlugin).toSelf().inSingletonScope();\n c.bind(ServiceMetaKind.NpmPackageJSONManager).toService(NpmPackageJSONManagerPlugin);\n c.bind(ServiceMetaKind.CodeGenerationLifecycleHooks).toService(NpmPackageJSONManagerPlugin);\n return c;\n }\n}\n","import { BaseNode } from '@lcap/nasl-concepts';\nimport { inject, injectable } from 'inversify';\nimport { JavaScriptDomain } from '../../service-interface';\nimport { JavaScriptCodegenPlugin, javaScriptCodeGenCallBackBag } from '../language/javascript-codegen-plugin';\n\n/**\n * JavaScript 与 React 相关的代码生成插件\n *\n * 因为 React 代码生成和默认的JavaScript代码生成并无不同,因此这里直接使用默认的JavaScript代码生成插件\n *\n * @public\n */\n@injectable()\nexport class ReactRelatedJavaScriptCodegenPlugin\n implements JavaScriptDomain.JavaScriptCodegen\n{\n constructor(\n @inject(JavaScriptCodegenPlugin)\n private javaScriptCodegen: JavaScriptCodegenPlugin\n ) {}\n printSyntaxNode(expr: BaseNode, callbackBag?: Partial<javaScriptCodeGenCallBackBag>): string {\n return this.javaScriptCodegen.printSyntaxNode(expr, callbackBag);\n }\n}\n","import { CallLogic, Identifier, Logic, Param } from '@lcap/nasl-concepts';\nimport {\n isLocalIndividualStateIRComponentRef,\n LocalLogicStateIR,\n StateActionIR,\n} from '../../types/state';\nimport { assertNever } from '../../utils/assert';\nimport { Logger } from '../../utils/logger';\nimport { paramToArgument } from '../../utils/syntax-node';\nimport { StateContextIR, StateManager } from '../ir-builder-plugin';\nimport { ReactFileDescription, ReactHook } from './react-codegen-plugin';\nimport { inject, injectable } from 'inversify';\nimport type { JavaScriptDomain } from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\n\nconst logger = Logger('ReactStateManagerVanilla');\n\n// FIXME wudengke 去掉这个类型\ntype TempWithCtx = (ctx: StateContextIR) => StateManager;\n\nexport class ReactHookBuilder {\n static emptyHook(): ReactHook {\n return {\n kind: 'free',\n code: ``,\n declarations: []\n };\n }\n static componentRefNameToHook(refName: string): ReactHook {\n const defaultStr = 'null';\n const code = `const ${refName}= useRef(${defaultStr});`;\n return {\n kind: 'free',\n code,\n import: {\n from: 'react',\n import: '{ useRef }',\n },\n declarations: [refName]\n };\n }\n static variableToHook(left: string, right: string): ReactHook {\n const code = `const ${left} = ${right};`;\n return {\n kind: 'free',\n code,\n declarations: [left]\n };\n }\n static componentRefsObjectToHook(refNameList: string[]): ReactHook {\n if (refNameList.length === 0) {\n return ReactHookBuilder.emptyHook();\n }\n const objectPropertiesStr = refNameList.join(',');\n const code = `const $refs = {${objectPropertiesStr}};`;\n return {\n kind: 'free',\n code,\n import: {\n from: 'react',\n import: '{ useRef }',\n },\n declarations: ['$refs']\n };\n }\n}\n\n/**\n * React 原生状态管理器\n */\n@injectable()\nexport class ReactStateManagerVanillaPlugin\n implements JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactStateManager\n{\n constructor(\n @inject(ServiceMetaKind.ReactJavaScriptCodePrinter)\n public reactJavaScriptCodegen: JavaScriptDomain.JavaScriptCodegen\n ) {}\n makeTreeStateHooks(ctx: StateContextIR): ReactHook[] {\n const treeStates = ctx.recursivelyExtractTreeStates();\n return treeStates.map((s): ReactHook => {\n switch (s.initialization.kind) {\n case 'global-hook': {\n const hookName = s.initialization.hookName;\n return {\n kind: 'free',\n code: `const ${s.identifier} = ${hookName}();`,\n import: {\n from: '/src/Hooks',\n import: `{${hookName}}`,\n },\n declarations: [s.identifier],\n };\n }\n case 'api-client': {\n return {\n kind: 'free',\n import: {\n from: '/src/apis',\n // FIXME wudengke 去掉genInitFromSchema\n import: '{apiClient, genInitFromSchema}',\n },\n code: '',\n declarations: [],\n };\n }\n case 'frontend-variable': {\n // TODO wudengke 前端全局变量的vanilla实现\n const hookName = s.initialization.hookName;\n return {\n kind: 'free',\n code: `const ${s.identifier} = ${hookName}();`,\n import: {\n from: '/src/global-variables',\n import: `{${hookName}}`,\n },\n declarations: [s.identifier],\n };\n }\n default:\n assertNever(s.initialization);\n }\n });\n }\n\n makeLocalLogicHooks(ctx: StateContextIR): ReactHook[] {\n const states = ctx.providedStates.flatMap((s): ReactHook[] => {\n const name = s.identifier;\n return [\n {\n kind: 'useState',\n declarations: [`${name}`, `use${name}`],\n initial: undefined,\n },\n ];\n });\n const actions = ctx.actions\n .filter((x) => x.kind === 'standalone')\n .flatMap((action): ReactHook[] => {\n const handlerName = action.name;\n return [\n {\n kind: 'useCallback',\n declaration: handlerName,\n deps: [],\n body: this.actionToBody(ctx, action),\n },\n ];\n });\n return [...states, ...actions];\n }\n actionToBody(ctx: StateContextIR, action: StateActionIR, getWithCtx?: () => TempWithCtx): string {\n /**\n * 根据当前action构造Logic\n * 1. 若action不包含任何逻辑则返回空Logic\n * 1. 若action包含一条逻辑,返回这条逻辑\n * 1. 若action包含多条逻辑,返回一个聚合逻辑。这个聚合逻辑负责调用多条逻辑。\n */\n function getWrappedLogic(): Logic {\n const params = action.params.map((x) => {\n return Param.from(x);\n });\n if (action.logics.length === 0) {\n return new Logic();\n } else if (action.logics.length === 1) {\n const logic = action.logics[0].logic;\n const newLogic = Logic.from({ ...logic, params });\n newLogic.body = logic.body;\n return newLogic;\n } else {\n // logics中存在多个logic。构造一个聚合logic\n const aggregatedLogic = Logic.from({\n params,\n body: action.logics.map((subLogic) => {\n const calleeName = `${subLogic.logic.name}`;\n return CallLogic.from({\n calleeName,\n arguments: action.params.map(paramToArgument),\n });\n }),\n });\n return aggregatedLogic;\n }\n }\n const wrappedLogic = getWrappedLogic();\n return `${ctx.resolveExprToString(\n wrappedLogic,\n this.reactJavaScriptCodegen,\n getWithCtx?.()?.(ctx) ?? this.withCtx(ctx)\n )}`;\n }\n makeLocalIndividualHooks(ctx: StateContextIR, getWithCtx?: () => TempWithCtx): ReactHook[] {\n const componentRefStates = ctx.providedStates.filter(isLocalIndividualStateIRComponentRef);\n const variables = ctx.providedStates.flatMap((x) => {\n if (x.kind === 'standalone' && x.initialization.kind === 'variable') {\n return [ReactHookBuilder.variableToHook(x.initialization.left, x.initialization.right)];\n }\n return [];\n });\n return [\n ...componentRefStates.map((x) => {\n return ReactHookBuilder.componentRefNameToHook(x.identifier);\n }),\n ReactHookBuilder.componentRefsObjectToHook(componentRefStates.map((x) => x.identifier)),\n ...variables,\n ...ctx.actions\n .filter((x) => x.kind === 'frontend-lifecycle')\n .flatMap((x): ReactHook[] => {\n const right = this.actionToBody(ctx, x, getWithCtx);\n const assignment = `window.${x.name} = ${right};`;\n return [\n {\n kind: 'useEffect',\n deps: [],\n body: `()=>{\n ${assignment}\n return ()=>{};\n }`,\n },\n ];\n }),\n ...ctx.actions\n .filter((x) => x.kind === 'view-lifecycle')\n .flatMap((x): ReactHook[] => {\n // TODO wudengke 根据x.name处理不同的生命周期\n // TODO wudengke 确定一下React的IDE支持哪些hook\n // Vue组件相关\n // - mounted\n // - created\n // - updated\n // - destroyed\n // 键盘相关\n // - keydown\n // - keyup\n return [\n {\n kind: 'useEffect',\n deps: [],\n body: `()=>{\n (${this.actionToBody(ctx, x, getWithCtx)})();\n return ()=>{};\n }`,\n },\n ];\n }),\n ];\n }\n initializationToExpr(\n ctx: StateContextIR,\n init: LocalLogicStateIR['initialization']\n ): string | undefined {\n if (!init) {\n return undefined;\n }\n // 根据init表达式的类型初始化\n switch (init.kind) {\n case 'static': {\n return ctx.resolveExprToString(\n init.value.expr,\n this.reactJavaScriptCodegen,\n this.withCtx(ctx)\n );\n }\n case 'url-param': {\n if (init.defaultValue?.expr) {\n return ctx.resolveExprToString(\n init.defaultValue?.expr,\n this.reactJavaScriptCodegen,\n this.withCtx(ctx)\n );\n }\n return undefined;\n }\n case 'props':\n if (init.defaultValue?.expr) {\n return ctx.resolveExprToString(\n init.defaultValue?.expr,\n this.reactJavaScriptCodegen,\n this.withCtx(ctx)\n );\n }\n return `props.${init.__raw.name}`;\n default: {\n return assertNever(init);\n }\n }\n }\n produceHooks(ctx: StateContextIR): ReactHook[] {\n const treeStateHooks = this.makeTreeStateHooks(ctx);\n const localIndividualHooks = this.makeLocalIndividualHooks(ctx);\n const localLogicHooks = this.makeLocalLogicHooks(ctx);\n // TODO wudengke 根据consumedState信息,去掉那些没有用到的hooks\n return [...treeStateHooks, ...localIndividualHooks, ...localLogicHooks];\n }\n /**\n * @deprecated 用依赖注入的方法做\n */\n withCtx(ctx: StateContextIR): StateManager {\n return {\n resolveIdentifier: (id: Identifier) => {\n return this.__resolveIdentifier(ctx, id);\n },\n resolveCalleeNamespace: (name: string) => {\n return this.__resolveName(ctx, name);\n },\n };\n }\n __resolveIdentifier(ctx: StateContextIR, id: Identifier): string | undefined {\n return this.__resolveName(ctx, id.name);\n }\n __resolveName(ctx: StateContextIR, name: string) {\n const resolvedName = resolveAsAction(name) ?? resolveAsState(name);\n if (!resolvedName) {\n logger.debug(`cannot find symbol \"${name}\" in the state context`);\n }\n return resolvedName;\n function resolveAsAction(name: string): string | undefined {\n const action = ctx.findActionByName(name);\n if (action) {\n return `${action.name}`;\n }\n }\n function resolveAsState(name: string): string | undefined {\n const state = ctx.findStateByName(name);\n if (!state) {\n return;\n }\n switch (state.kind) {\n case 'standalone':\n case 'local-logic':\n case 'tree': {\n return name;\n }\n default: {\n assertNever(state);\n }\n }\n }\n }\n __hooksDefinitions(): ReactFileDescription {\n return new ReactFileDescription(\n 'VanillaHookUtils',\n [],\n [],\n [\n `\n const useStateRef = <T extends unknown>(initialState: T) => {\nconst [state, setState] = useState(initialState);\nconst ref = useRef(initialState);\n\nuseEffect(() => {\n ref.current = state;\n}, [state]);\n\n// Use \"as const\" below so the returned array is a proper tuple\nreturn [state, setState, ref] as const;\n};\n `,\n ]\n );\n }\n}\n","import { Argument, Identifier, Param } from \"@lcap/nasl-concepts\";\n\nexport function paramToArgument(param: {name: string}): Argument {\n return new Argument({ expression: new Identifier({ name: param.name }) });\n}\n","import { Identifier } from '@lcap/nasl-concepts';\nimport { isBusinessLogic } from '@lcap/nasl-concepts/asserts';\nimport { Container, inject, injectable } from 'inversify';\nimport { LocalLogicStateIR, StateActionIR } from '../../types/state';\nimport { assertNever } from '../../utils/assert';\nimport { Logger } from '../../utils/logger';\nimport { ApiClientIdentifier, StateContextIR } from '../ir-builder-plugin';\nimport { ReactFileDescription, ReactHook } from './react-codegen-plugin';\nimport { ReactStateManagerVanillaPlugin } from './react-state-manager-vanilla-plugin';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { JavaScriptDomain } from '../../service-interface';\nimport { isNotNil } from '../../utils/types';\n\nconst logger = Logger('ReactStateManagerMobxPlugin');\n\nfunction shouldGenerateLocalStore(ctx: StateContextIR, storeName: string){\n const storeStates = ctx.providedStates.filter((x) => x.identifier === storeName);\n if (storeStates.length > 1) {\n throw new Error(`上下文中有多个状态名为${storeName}`);\n }\n if (storeStates.length === 1) {\n logger.debug(`上下文中已经存在${storeName},名为,不进行额外生成`);\n return false;\n }\n return true;\n}\n\n/**\n * React 原生状态管理器\n */\n@injectable()\nexport class ReactStateManagerMobxPlugin\n implements JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactHookProvider\n{\n constructor(\n @inject(ReactStateManagerVanillaPlugin)\n private reactStateManagerVanillaPlugin: ReactStateManagerVanillaPlugin\n ) {}\n makeLocalLogicBundleHook(ctx: StateContextIR): ReactHook | undefined {\n const self = this;\n\n const shouldGen = shouldGenerateLocalStore(ctx, self.storeName);\n if(!shouldGen){\n return undefined;\n }\n\n const actionToProperty = (action: StateActionIR) => {\n return `${action.name}:${this.reactStateManagerVanillaPlugin.actionToBody(ctx, action, () => {\n return this.withCtx.bind(this);\n })}`;\n };\n // 包括 actions & states\n const properties: string[] = [\n ...ctx.providedStates\n .filter(\n (x): x is LocalLogicStateIR =>\n x.kind === 'local-logic' && x.initialization?.kind !== 'url-param'\n )\n .map(localLogicStateToProperty),\n ...ctx.actions.filter((x) => x.kind === 'standalone').map(actionToProperty),\n ];\n\n function getUrlStateCode() {\n const urlStates = ctx.providedStates.filter(\n (x): x is LocalLogicStateIR =>\n x.kind === 'local-logic' && x.initialization?.kind === 'url-param'\n );\n const code = urlStates\n .map((s) => {\n const init =\n self.reactStateManagerVanillaPlugin.initializationToExpr(ctx, s.initialization) ?? `''`;\n const getter = `\n get ${s.identifier}() {\n return ${self.storeName}.$queryParams.get('${s.identifier}') || ${init};\n }\n `;\n // TODO wudengke 使用self来获取storeName\n const setter = `\n set ${s.identifier}(value) {\n ${self.storeName}.$updateQueryParam('${s.identifier}', value);\n }\n `;\n return `${getter},${setter}`;\n })\n .join(',');\n if (code) {\n return `\n $queryParams: new URL(window.location).searchParams,\n $updateQueryParam(key: string, value: string) {\n const params = new URL(window.location).searchParams;\n params.set(key, value);\n window.history.pushState(null, '', '?' + params.toString());\n ${self.storeName}.$queryParams = params;\n },\n ${code},`;\n }\n return code;\n }\n const urlStatesCode = getUrlStateCode();\n const propertiesCode = properties.join(',');\n return {\n kind: 'free',\n code: `const ${self.storeName} = useLocalObservable(()=>{\n return {\n ${urlStatesCode}\n ${propertiesCode}\n }\n })`,\n import: {\n import: '{ useLocalObservable }',\n from: 'mobx-react-lite',\n },\n declarations: [self.storeName]\n };\n function localLogicStateToProperty(state: LocalLogicStateIR): string {\n const initValue = self.reactStateManagerVanillaPlugin.initializationToExpr(\n ctx,\n state.initialization\n );\n return `${state.identifier}: ${initValue ?? 'undefined'}`;\n }\n }\n makePublicBusinessLogicHook(ctx: StateContextIR): ReactHook[] {\n const publicBusinessLogic = ctx.actions.filter(\n (x) => x.kind === 'standalone' && isBusinessLogic(x.__raw) && x.__raw.isPublic\n );\n\n if (publicBusinessLogic.length === 0) {\n return [];\n }\n\n return [\n {\n kind: 'free',\n code: `\n useImperativeHandle(ref, () => ({\n ${publicBusinessLogic.map((x) => `${x.name}: ${this.storeName}.${x.name}`).join(',')}\n }));\n `,\n import: {\n from: 'react',\n import: '{ useImperativeHandle }',\n },\n declarations: []\n },\n ];\n }\n /**\n * 根据所消费的State的信息,产生支持消费的Hooks调用\n */\n produceHooks(ctx: StateContextIR): ReactHook[] {\n // TODO wudengke 因为这个方法会修改ctx(注册componentRef)。用类型保证ctx调用顺序!\n const localLogicBundleHook = this.makeLocalLogicBundleHook(ctx);\n const treeStateHooks = this.reactStateManagerVanillaPlugin.makeTreeStateHooks(ctx);\n // TODO wudengke `individual`语义比较模糊,需要重命名。\n const localIndividualHooks = this.reactStateManagerVanillaPlugin.makeLocalIndividualHooks(\n ctx,\n () => {\n return this.withCtx.bind(this);\n }\n );\n // TODO wudengke 根据consumedState信息,去掉那些没有用到的hooks\n const publicBusinessLogicHook = this.makePublicBusinessLogicHook(ctx);\n return [\n ...treeStateHooks,\n localLogicBundleHook,\n ...localIndividualHooks,\n ...publicBusinessLogicHook,\n ].filter(isNotNil);\n }\n get storeName() {\n return 'localStore';\n }\n __resolveIdentifier(ctx: StateContextIR, id: Identifier): string | undefined {\n return this.__resolveName(ctx, id.name);\n }\n __resolveName(ctx: StateContextIR, name: string) {\n const self = this;\n const resolvedName = resolveAsAction(name) ?? resolveAsState(name);\n if (!resolvedName) {\n logger.debug(`cannot find symbol \"${name}\" in the state context`);\n }\n return resolvedName;\n function resolveAsAction(name: string): string | undefined {\n const action = ctx.findActionByName(name);\n if (action) {\n return `${self.storeName}.${action.name}`;\n }\n }\n function resolveAsState(name: string): string | undefined {\n const state = ctx.findStateByName(name);\n if (!state) {\n return;\n }\n switch (state.kind) {\n case 'standalone': {\n switch (state.initialization.kind) {\n case 'component-ref': {\n return `$refs.${name}`;\n }\n case 'variable': {\n return `${name}`;\n }\n default: {\n assertNever(state.initialization);\n }\n }\n }\n case 'tree': {\n return name;\n }\n case 'local-logic': {\n return `${self.storeName}.${name}`;\n }\n default: {\n assertNever(state);\n }\n }\n }\n }\n /**\n * @deprecated 用依赖注入的方法做\n */\n withCtx(ctx: StateContextIR) {\n return {\n resolveIdentifier: (id: Identifier) => {\n return this.__resolveIdentifier(ctx, id);\n },\n resolveName: (name: string) => {\n return this.__resolveName(ctx, name);\n },\n resolveCalleeNamespace: (name: string) => {\n const resolveAsNamespace = (ns: string) => {\n // TODO wudengke 可以在IR层面处理\n if (ns.startsWith('nasl.')) {\n // FIXME wudengke 实现它\n return undefined;\n } else if (ns.startsWith('app.logics')) {\n return this.__resolveName(ctx, ApiClientIdentifier);\n }\n };\n const res = resolveAsNamespace(name);\n if (res) {\n return res;\n } else {\n const res = this.__resolveName(ctx, name);\n // FIXME wudengke\n if (res?.endsWith('Ref')) {\n return `${res}.current`;\n }\n return res;\n }\n },\n };\n }\n genHookDefinition(): ReactFileDescription {\n return new ReactFileDescription(\n 'MobxHooks',\n [],\n [],\n [\n `export const useUserInfo = ()=>{\n return window.$global.userInfo ?? {};\n }`,\n ]\n );\n }\n\n static install(container: Container) {\n const c = container.createChild();\n c.bind(ServiceMetaKind.ReactStateManager).to(ReactStateManagerMobxPlugin);\n c.bind(ServiceMetaKind.ReactHookProvider).to(ReactStateManagerMobxPlugin);\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLDomain } from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { ComponentInstanceIR, GeneralComponentIR, NASLAppIR } from '../../types/ir';\nimport { Logger } from '../../utils';\nimport { isReferencedComponentATemplate } from '../../utils/component';\nimport { bindAttrToIR } from '../ir-builder-plugin';\n\nconst logger = Logger('ReactSlotPlugin');\n\n/**\n * React Slot 插件\n *\n * 1. 将slot元素移动到attrs中\n * 2. 对ViewElement的tag为template的slotScope,根据其所处的层级,修改slotScope的名字\n * @public\n */\n@injectable()\nexport class ReactSlotPlugin implements NASLDomain.IRPostProcesser {\n postProcess(ir: NASLAppIR): NASLAppIR {\n logger.info('IR 后处理');\n function processComponentInstance(c: ComponentInstanceIR) {\n ReactSlotPlugin.recursivelyFixNestedSlotScope(c, {\n currentNestedLevel: 0,\n });\n ReactSlotPlugin.recursivelyProcessSlot(c);\n }\n function traverseRootComponentInstances(c: GeneralComponentIR) {\n c.elements.forEach((c) => {\n processComponentInstance(c);\n });\n if (c.kind === 'view') {\n // 递归处理子页面\n c.childComponents.forEach((subView) => {\n traverseRootComponentInstances(subView);\n });\n }\n }\n ir.bizComponents.forEach((biz) => {\n traverseRootComponentInstances(biz);\n });\n ir.views.forEach((view) => {\n traverseRootComponentInstances(view);\n });\n return ir;\n }\n /**\n * 将slot元素移动到attrs中\n * @param c\n */\n static recursivelyProcessSlot(c: ComponentInstanceIR) {\n // 后序遍历\n // 在recursivelyHandleComponentInstanceIr中children中有些元素会被移动到attrs中\n // 若不先处理children,这些被移动到attrs中的元素就不会被处理\n c.children.forEach((c) => {\n ReactSlotPlugin.recursivelyProcessSlot(c);\n });\n ReactSlotPlugin.processForSlots(c);\n }\n /**\n * 递归地根据对ViewElement所处的层级,给slotScope加上数字后缀\n *\n * slotScope只会取值为current。则根据层级,依次修改为current1, current2, current3等...\n * @param c\n */\n static recursivelyFixNestedSlotScope(\n c: ComponentInstanceIR,\n options: {\n /**\n * 当前嵌套的层级, 定义为:当前元素的祖先a中有多少a.slot.scope非空\n */\n currentNestedLevel: number;\n }\n ) {\n const currentScopeVaraibleName = 'current';\n // 若当前元素的slot.scope非空,则说明当前元素具有current\n const hasCurrent = !!c.slot.scope;\n if (hasCurrent && options.currentNestedLevel >= 1) {\n // 若当前元素具有current,则将当前元素的scopeVariableName修改为current1, current2, current3等...\n c.slot.scope = `${currentScopeVaraibleName}${options.currentNestedLevel}`;\n }\n // 若当前元素具有current,则说明当前元素的嵌套层级+1\n const levelDelta = hasCurrent ? 1 : 0;\n const nextLevel = options.currentNestedLevel + levelDelta;\n for (const child of c.children) {\n ReactSlotPlugin.recursivelyFixNestedSlotScope(child, {\n currentNestedLevel: nextLevel,\n });\n }\n }\n static processForSlots(c: ComponentInstanceIR) {\n const newChildren: ComponentInstanceIR[] = [];\n for (const child of c.children) {\n const slotName = child.slot.target;\n // slotName非空则说明它是插槽元素\n if (slotName) {\n // 约定:不允许有多个slotName相同的子元素\n // 约定:不允许slotName和父组件的属性同名\n if (c.attrs.some((x) => x.name === slotName)) {\n const nodePath = c.__raw?.nodePath;\n throw new Error(\n `${nodePath}存在多个slotName=${slotName}的子元素或已经有attr名为${slotName},为脏数据`\n );\n }\n // 约定:若child为空的template标签,则直接忽略\n if (isReferencedComponentATemplate(child.component) && child.children.length === 0) {\n continue;\n }\n const ir = bindAttrToIR({\n type: 'component',\n component: child,\n scopeVariable: child.slot.scope,\n name: slotName,\n });\n if (ir) {\n c.attrs.push(ir);\n }\n } else {\n newChildren.push(child);\n }\n }\n c.children = newChildren;\n }\n static install(c: Container) {\n c.bind(ServiceMetaKind.IRPostProcesser).to(ReactSlotPlugin).inSingletonScope();\n return c;\n }\n}\n","import '@abraham/reflection';\nimport { injectable, type Container, inject } from 'inversify';\nimport { App, Frontend } from '@lcap/nasl-concepts';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { CommonAppConfig } from '../../../types/config';\nimport { GeneratorInfrastructureDomain } from '../../../service-interface';\nimport { isNotNil } from '../../../utils/types';\nimport { Logger } from '../../../utils/logger';\nimport {\n extractAppLevelFrontendDeps,\n extractFrontendLevelDeps,\n downloadDependenciesToPackages,\n downloadDependenciesToLcapModules,\n} from '../../../utils/dependency-management';\nimport { getPublicPath, getBackendPath } from '../../../utils/url';\nimport { FrontendBundlerConfigPlugin } from '../frontend-bundler-config-plugin';\n\ntype FS = GeneratorInfrastructureDomain.FileSystemProvider;\n\nconst logger = Logger('BundlerConfigDataPlugin');\n\n@injectable()\nexport class BundlerConfigDataPlugin {\n constructor(\n @inject(ServiceMetaKind.FrontendBundlerConfig)\n private frontendBundlerConfigPlugin: FrontendBundlerConfigPlugin\n ) {}\n\n async getBundlerConfigData(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig,\n fs: FS,\n frameworkKind: 'vue3' | 'react' | 'vue2'\n ) {\n const feDeps = [...extractAppLevelFrontendDeps(app), ...extractFrontendLevelDeps(frontend)];\n\n await downloadDependenciesToLcapModules(feDeps, fs, {\n STATIC_URL: config.STATIC_URL,\n frameworkKind,\n });\n\n const orginDependencies = await downloadDependenciesToPackages(feDeps, fs, {\n STATIC_URL: config.STATIC_URL,\n });\n const dependencies = orginDependencies\n ?.map((dep) => {\n const target = dep.sources.find((x) => x.endsWith('/index.js'));\n if (target) {\n return {\n name: dep.name,\n resolvedTo: `./src/${target}`.replace(/\\/index\\.js$/, ''),\n scope: dep.kind === 'extension' ? '@extension' : undefined,\n };\n }\n return undefined;\n })\n .filter(isNotNil)\n .map((x) => {\n const name = x.scope ? `${x.scope}/${x.name}` : x.name;\n return {\n pkgName: name,\n ...x,\n };\n });\n\n let aliasMapStr = `\\n'@': path.resolve(__dirname, './src'),\\n`;\n if (dependencies && dependencies.length > 0) {\n aliasMapStr +=\n '\\n' +\n dependencies\n ?.map((x) => {\n return `'${x.pkgName}' : path.resolve(__dirname, '${x.resolvedTo}'),`;\n })\n .join('\\n');\n }\n\n const dependenciesStr = dependencies?.map((x) => `'${x.pkgName}'`).join(', ');\n const publicPath = getPublicPath(app, config, frontend);\n const backendUrl = getBackendPath(app, config, logger);\n logger.info(\n { publicPath, backendUrl, aliasMapStr },\n frameworkKind === 'vue3' ? 'vite配置' : 'rspack配置'\n );\n\n // 将 backendUrl publicPath aliasMapStr 等动态信息保存到 compiler-config-plugin 插件中\n this.frontendBundlerConfigPlugin.setCompilerConfig({\n backendUrl,\n publicPath,\n aliasMapStr,\n });\n\n return { backendUrl, publicPath, aliasMapStr, dependenciesStr };\n }\n\n static install(c: Container) {\n c.bind(BundlerConfigDataPlugin).toSelf();\n return c;\n }\n}\n","import { App, Frontend } from '@lcap/nasl-concepts';\nimport { CommonAppConfig } from '../types/config';\nimport { lightJoin } from 'light-join';\n\n// TODO wudengke 确认是否更换https\nexport function getBasePath(app: App, config: CommonAppConfig, ensureProtocol?: 'http') {\n let baseUrl = `${config.USER_STATIC_URL}/${config.tenant}/${app.id}/${config.env}`;\n if (ensureProtocol && baseUrl.startsWith('//')) {\n return `${ensureProtocol}:${baseUrl}`;\n }\n return baseUrl;\n}\n\nexport function ensureHasPrefix(target: string, prefix: string) {\n return target.startsWith(prefix) ? target : `${prefix}${target}`;\n}\n\n// TODO wudengke 整理一下这个和getBasePath函数\nfunction ensureUrlHasProtocol(url: string) {\n try {\n const parsedUrl = new URL(url);\n if (parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:') {\n // URL 已经包含协议\n return url;\n } else {\n // URL 没有协议,添加协议后返回\n return 'https://' + url;\n }\n } catch (error) {\n return `https://${url}`;\n }\n}\n\nexport function normalizeStaticUrl(staticURL: string) {\n // staticUrl形如 \"//minio-api.react01-lowcode.com/lowcode-static\",因此需要去掉前缀//\n return ensureUrlHasProtocol(staticURL.replace(/^\\/\\//, ''));\n}\n\nexport function urlJoin(...args: string[]) {\n return args.map((arg) => arg.replace(/^\\/|\\/$/g, '')).join('/');\n}\n\n// TODO wudengke 重构一下这个函数\nexport function getPublicPath(app: App, config: CommonAppConfig, frontend: Frontend): string {\n if (config.isExport) {\n return `/`;\n }\n const publicPath = `${getBasePath(app, config)}${frontend.basePath ?? ''}`;\n if (publicPath.endsWith('/')) {\n return publicPath;\n }\n return `${publicPath}/`;\n}\n\nexport function getBackendPath(app: App, config: CommonAppConfig, logger: any) {\n if (config.isExport) {\n return 'http://localhost:8080';\n }\n const url = `http://${config.env}.${app.name}.${config.tenant}.${config.lowcodeDomain}`;\n if (app.sysPrefixPath) {\n logger.info(`启用全局前缀: sysPrefixPath = ${app.sysPrefixPath}`);\n return lightJoin(url, app.sysPrefixPath);\n }\n return url;\n}\n","import { App, Frontend, Module } from '@lcap/nasl-concepts';\nimport { Logger } from './logger';\nimport { normalizeStaticUrl } from './url';\nimport { isConnector } from '@lcap/nasl-concepts/asserts';\nimport { GeneratorInfrastructureDomain } from '../service-interface';\n/**\n * 翻译器不使用fetch,在node中fetch由udici实现,可能会遇到UND_ERR_CONNECT_TIMEOUT问题\n * refer to: https://undici.nodejs.org/#/?id=network-address-family-autoselection\n */\nimport axios from 'axios';\nimport {\n getPredefinedLibConstants,\n getPredefinedMaterialByTags,\n} from '../hack/material-config/predefined-dependencies-manager';\n\ntype PackageDesc = { name: string; version: string; kind: 'standard' | 'extension' };\n\ntype FS = GeneratorInfrastructureDomain.FileSystemProvider;\n\nexport function extractAppLevelFrontendDeps(app: App): PackageDesc[] {\n const logger = Logger('extractFrontendDeps');\n const feExtensions = app.dependencies.filter((dep): dep is Module => {\n return !isConnector(dep) && !!dep.frontends?.length;\n });\n\n // const packageInfo = app.packageInfos.find((info) => info.scope === frontend.type);\n // //@ts-expect-error frontend没有这个属性\n // const frameworkKind = frontend?.frameworkKind ?? 'react';\n // const ui = packageInfo?.ui.find((info) => info.frameworkKind === frameworkKind);\n\n logger.info({ packageInfo: app.packageInfos });\n\n // 暂时先不需要template,等vue也接入翻译器了再说\n // const template = packageInfo?.template.find(info => info.frameworkKind === frameworkKind);\n\n const deps: PackageDesc[] = [\n ...feExtensions.map(({ name, version }) => {\n return { name, version, kind: 'extension' } as const;\n }),\n ];\n\n return deps;\n}\n\n/**\n * 提取前端依赖库,例如框架等\n * @param frontend\n * @returns\n */\nexport function extractFrontendLevelDeps(frontend: Frontend): PackageDesc[] {\n const deps = [];\n if (frontend.frameworkKind === 'react') {\n deps.push(getPredefinedLibConstants().reactUI);\n } else if (frontend.frameworkKind === 'vue3') {\n deps.push(getPredefinedLibConstants().vue3Ui);\n }\n return deps;\n}\n\ntype WriteOnlyFS = {\n write: (path: string, content: string) => void;\n};\n\nexport async function downloadDependenciesToPackages(\n feDeps: PackageDesc[],\n fs: WriteOnlyFS,\n config: { STATIC_URL: string }\n) {\n const logger = Logger('downloadDependenciesToPackages');\n if (feDeps.length === 0) {\n logger.info('无依赖库需要下载到 packages 目录');\n return;\n } else {\n logger.info(\n { feExtensions: feDeps.map((x) => `${x.name}@${x.version}`) },\n '需要下载到 packages 目录的前端依赖库列表'\n );\n }\n logger.info('开始下载前端依赖库到 packages 目录');\n const staticUrl = normalizeStaticUrl(config.STATIC_URL);\n const files = await Promise.all(\n feDeps.map(async (ext) => {\n logger.info({ ext }, '下载前端依赖库到 packages 目录');\n const isExtension = ext.kind === 'extension';\n const path = `packages${isExtension ? '/extension' : ''}/${ext.name}@${ext.version}`;\n const commonPrefix = `${path}/dist-theme`;\n const packagePathWithPrefix = `${staticUrl}/${path}`;\n const sources = await listPackageSources(ext);\n logger.debug({ sources });\n const urlSources = sources.map((source) => {\n const url = `${staticUrl}/${source}`;\n logger.debug({ url, source });\n return { url, source };\n });\n // HACK: 默认创建一个空的样式文件\n fs.write(`/src/${path}/dist-theme/index.css`, '');\n logger.info({ urls: urlSources.map((x) => x.url) }, '下载文件列表');\n try {\n await Promise.all([\n ...urlSources.map(async ({ source, url }) => {\n logger.debug({ url }, '正在下载');\n try {\n const response = await axios.get(url, { responseType: 'text' });\n const text = response.data;\n const vfsPath = `/src/${source}`;\n fs.write(vfsPath, text);\n logger.debug({ vfsPath }, '写入虚拟文件系统路径');\n } catch (error) {\n logger.error({ url, error }, '下载失败');\n }\n logger.debug({ url }, '下载成功');\n }),\n ]);\n } catch (error) {\n logger.error(error);\n }\n\n async function listPackageSources({ name, version, kind }: PackageDesc) {\n if (kind === 'standard') {\n // 若是官方组件库,没有manifest文件,且约定必定有index.js和index.css\n return ['index.js', 'index.css'].map((x) => {\n return `packages/${name}@${version}/dist-theme/${x}`;\n });\n }\n const manifestUrl = `${packagePathWithPrefix}/manifest`;\n try {\n const response = await axios.get(manifestUrl, { responseType: 'text' });\n const manifestText = response.data as string;\n const sources = manifestText\n .split(/\\n/)\n .filter((text) => text.trim().startsWith(commonPrefix))\n .map((line) => {\n return line.split(':')[0].trim();\n });\n if (sources.length === 0) {\n // HACK: 有些包没有manifest文件,此时默认下载index.js\n return [`${path}/dist-theme/index.js`];\n }\n return sources;\n } catch (error) {\n if (error instanceof Error) {\n const err = new Error(`下载 ${manifestUrl} 失败: ${error.message}`);\n logger.error(err);\n throw err;\n }\n throw error;\n }\n }\n return { packagePath: packagePathWithPrefix, sources, projectPath: path, ...ext };\n })\n );\n logger.info('下载前端依赖库到 packages 目录完成');\n logger.debug(files);\n return files;\n}\n\nexport async function judgePackageZipExists(dep: PackageDesc, staticUrl: string): Promise<boolean> {\n const file = `${dep.name}@${dep.version}/zip.tgz`;\n const isExtension = dep.kind === 'extension';\n const url = `${normalizeStaticUrl(staticUrl)}/packages${isExtension ? '/extension' : ''}/${file}`;\n try {\n const response = await axios.head(url, {\n headers: {\n 'Content-Type': 'application/zip',\n },\n });\n return response.status === 200;\n } catch (error) {\n return false;\n }\n}\n\nasync function downloadDependencyToLcapModules(\n dep: PackageDesc,\n fs: FS,\n staticUrl: string,\n logger: any\n) {\n const { name: pkgName, version: pkgVersion, kind } = dep;\n let packageJson: any = fs.read('/package.json')?.toString();\n if (packageJson) {\n try {\n packageJson = JSON.parse(packageJson);\n\n // 先判断是否存在 zip.tgz 包,不存在则抛错\n const isPackageZipExists = await judgePackageZipExists(dep, staticUrl);\n if (!isPackageZipExists) {\n logger.info(`前端依赖 ${pkgName}@${pkgVersion} 的 zip.tgz 包不存在`);\n throw new Error('zip.tgz NotFound');\n }\n\n // 拉取远端 zip.tgz 包\n const file = `${pkgName}@${pkgVersion}/zip.tgz`;\n const isExtension = kind === 'extension';\n const url = `${normalizeStaticUrl(staticUrl)}/packages${\n isExtension ? '/extension' : ''\n }/${file}`;\n\n const response = await axios.get(url, {\n responseType: 'arraybuffer',\n headers: {\n 'Content-Type': 'application/gzip',\n },\n });\n const targetPath = `/lcap_modules/${file}`;\n fs.write(targetPath, response.data);\n logger.info(`下载依赖 ${pkgName}@${pkgVersion} 到 lcap_modules 目录下`);\n return {\n pkgName,\n targetPath,\n };\n } catch (error) {\n throw error;\n }\n }\n}\n\nexport async function downloadDependenciesToLcapModules(\n feDeps: PackageDesc[],\n fs: FS,\n config: { STATIC_URL: string; frameworkKind: 'vue3' | 'react' | 'vue2' }\n) {\n const logger = Logger('downloadDependenciesToLcapModules');\n if (feDeps.length === 0) {\n logger.info('无依赖库');\n return;\n } else {\n logger.info({ feExtensions: feDeps.map((x) => `${x.name}@${x.version}`) }, '前端依赖库列表');\n }\n logger.info('开始下载前端依赖库到 lcap_modules 目录');\n const staticUrl = normalizeStaticUrl(config.STATIC_URL);\n try {\n // 先下载 basic-template\n const basicTemplate = getPredefinedMaterialByTags(['template', 'core']);\n const downloadedDeps = [];\n if (basicTemplate) {\n const res = await downloadDependencyToLcapModules(\n { ...basicTemplate, kind: 'standard' },\n fs,\n staticUrl,\n logger\n );\n if (res) {\n downloadedDeps.push(res);\n }\n }\n\n // react 应用暂时不需要下载依赖的 zip.tgz 包到 lcap_modules 目录下作为依赖\n // 仍然采用下载 index.js 和 index.css 文件到 packages 目录下作为依赖,alias 到 packages 目录下\n // 原因:一方面是翻译器翻译的引用相关的代码的问题,一方面是包本身 pkg 定义的问题\n if (config.frameworkKind === 'vue3') {\n // 优先下载依赖的 zip.tgz 包到 lcap_modules 目录下,作为依赖\n await Promise.all(\n feDeps.map(async (dep) => {\n try {\n const res = await downloadDependencyToLcapModules(dep, fs, staticUrl, logger);\n\n if (res) {\n // 下载成功后立即从数组中删除\n const index = feDeps.indexOf(dep);\n feDeps.splice(index, 1);\n\n downloadedDeps.push(res);\n }\n } catch (error) {}\n })\n );\n }\n\n // 将已经下载的依赖更新到 package.json 中\n let packageJson: any = fs.read('/package.json')?.toString();\n packageJson = JSON.parse(packageJson);\n if (!packageJson.dependencies) {\n packageJson.dependencies = {};\n }\n downloadedDeps.forEach(({ pkgName, targetPath }) => {\n packageJson.dependencies[pkgName] = `.${targetPath}`;\n });\n fs.write('/package.json', JSON.stringify(packageJson, null, 2));\n\n logger.info('下载前端依赖库到 lcap_modules 目录完成');\n } catch (error) {\n if (error instanceof Error) {\n logger.error(`下载前端依赖的 zip.tgz 包失败:${error.message}`);\n }\n }\n}\n","import '@abraham/reflection';\nimport { injectable, type Container, inject } from 'inversify';\nimport { App, Frontend } from '@lcap/nasl-concepts';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { CommonAppConfig } from '../../../types/config';\nimport { GeneratorInfrastructureDomain } from '../../../service-interface';\nimport { BundlerConfigDataPlugin } from './bundler-config-data-plugin';\nimport { FrontendPerformancePlugin } from '../frontend-performance-plugin';\n\ntype FS = GeneratorInfrastructureDomain.FileSystemProvider;\n\n@injectable()\nexport class RspackConfigPlugin {\n constructor(\n @inject(BundlerConfigDataPlugin)\n private bundlerConfigDataPlugin: BundlerConfigDataPlugin,\n @inject(ServiceMetaKind.FrontendPerformance)\n private frontendPerformancePlugin: FrontendPerformancePlugin\n ) {}\n\n async configBundlerConfig(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig,\n fs: FS,\n frameworkKind: 'vue3' | 'react' | 'vue2'\n ) {\n const { backendUrl, publicPath, aliasMapStr, dependenciesStr } =\n await this.bundlerConfigDataPlugin.getBundlerConfigData(\n app,\n frontend,\n config,\n fs,\n frameworkKind\n );\n\n let rspackConfigSource = fs.read('/rspack.config.js')?.toString();\n if (rspackConfigSource) {\n if (this.frontendPerformancePlugin?.performanceOptions?.chunks) {\n rspackConfigSource = rspackConfigSource.replace(\n `chunks: 'all'`,\n `chunks: '${this.frontendPerformancePlugin?.performanceOptions?.chunks}'`\n );\n }\n fs.write(\n '/rspack.config.js',\n rspackConfigSource\n .replace(`const backendUrl = '';`, `const backendUrl = '${backendUrl}'`)\n .replace(`const publicPath = '';`, `const publicPath = '${publicPath}';`)\n .replace(`sourceMap: false,`, `sourceMap: ${config.env === 'dev'},`)\n .replace('alias: {}', `alias: {${aliasMapStr}}`)\n );\n }\n }\n\n static install(c: Container) {\n c.bind(ServiceMetaKind.FrontendBundlerFileConfig).to(RspackConfigPlugin).inSingletonScope();\n return c;\n }\n}\n","import '@abraham/reflection';\nimport { injectable, type Container, inject } from 'inversify';\nimport { App, Frontend } from '@lcap/nasl-concepts';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { CommonAppConfig } from '../../../types/config';\nimport { GeneratorInfrastructureDomain } from '../../../service-interface';\nimport { BundlerConfigDataPlugin } from './bundler-config-data-plugin';\nimport { FrontendBundlerConfigPlugin } from '../frontend-bundler-config-plugin';\nimport { FrontendPerformancePlugin } from '../frontend-performance-plugin';\n\ntype FS = GeneratorInfrastructureDomain.FileSystemProvider;\n\n@injectable()\nexport class ViteConfigPlugin {\n constructor(\n @inject(BundlerConfigDataPlugin)\n private bundlerConfigDataPlugin: BundlerConfigDataPlugin\n ) {}\n\n async configBundlerConfig(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig,\n fs: FS,\n frameworkKind: 'vue3' | 'react' | 'vue2'\n ) {\n const isDev = config.env === 'dev';\n const { backendUrl, publicPath, aliasMapStr, dependenciesStr } =\n await this.bundlerConfigDataPlugin.getBundlerConfigData(\n app,\n frontend,\n config,\n fs,\n frameworkKind\n );\n\n const viteConfigSource = fs.read('/vite.config.ts')?.toString();\n if (viteConfigSource) {\n fs.write(\n '/vite.config.ts',\n viteConfigSource\n .replace(`const backendUrl = ''`, `const backendUrl = '${backendUrl}'`)\n .replace(`const publicPath = ''`, `const publicPath = '${publicPath}'`)\n .replace(`const isDev = false`, `const isDev = ${isDev}`)\n .replace('alias: {}', `alias: {${aliasMapStr}}`)\n .replace(\n 'optimizeDeps: { include: [], },',\n `optimizeDeps: { include: [${dependenciesStr}], },`\n )\n );\n }\n }\n\n static install(c: Container) {\n c.bind(ServiceMetaKind.FrontendBundlerFileConfig).to(ViteConfigPlugin).inSingletonScope();\n return c;\n }\n}\n","import { Container, inject, injectable } from 'inversify';\nimport { CommonAppConfig } from '../../../types/config';\nimport { GeneralComponentIR, NASLAppIR } from '../../../types/ir';\nimport { InputFile } from '../../misc/project-organization-plugin';\nimport { RoutesExtractionPlugin } from '../../misc/routes-extraction-plugin';\nimport { ComponentIRToPathDict, ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { VueRouterPlugin } from '../common/vue-router-plugin';\nimport { Vue3CodegenPlugin } from './vue3-codegen-plugin';\nimport { Vue3EntryBuilderPlugin } from './vue3-entry-builder-plugin';\nimport { Vue3LibrariesBuilderPlugin } from './vue3-libraries-builder-plugin';\nimport { Vue3MetaDataBuilderPlugin } from './vue3-meta-data-builder-plugin';\nimport { Vue3ComponentsIndexBuilderPlugin } from './vue3-components-index-builder-plugin';\nimport { Vue3ClientLazyloadTemplateBuilderPlugin } from './vue3-client-lazyload-template-builder-plugin ';\nimport { Vue3PlatformBuilderPlugin } from './vue3-platform-builder-plugin';\nimport { Vue3EntryCssPlugin } from './vue3-entry-css-plugin';\n\n@injectable()\nexport class ComponentPathManager {\n private componentIRToPathDict: ComponentIRToPathDict = new WeakMap();\n\n markComponent(ir: GeneralComponentIR, path: string) {\n this.componentIRToPathDict.set(ir, path);\n return this;\n }\n getPathOf(ir: GeneralComponentIR) {\n return this.componentIRToPathDict.get(ir);\n }\n}\n\n@injectable()\nexport class Vue3ApplicationAssemblerPlugin {\n constructor(\n @inject(Vue3CodegenPlugin) private vue3CodegenPlugin: Vue3CodegenPlugin,\n @inject(RoutesExtractionPlugin) private routesExtactor: RoutesExtractionPlugin,\n @inject(VueRouterPlugin) private routerBuilder: VueRouterPlugin,\n @inject(Vue3EntryBuilderPlugin) private entryBuilder: Vue3EntryBuilderPlugin,\n @inject(Vue3LibrariesBuilderPlugin) private librariesBuilder: Vue3LibrariesBuilderPlugin,\n @inject(Vue3EntryCssPlugin) private entryCssBuilder: Vue3EntryCssPlugin,\n @inject(Vue3ComponentsIndexBuilderPlugin)\n private componentsIndexBuilder: Vue3ComponentsIndexBuilderPlugin,\n @inject(Vue3ClientLazyloadTemplateBuilderPlugin)\n private clientLazyloadTemplateBuilder: Vue3ClientLazyloadTemplateBuilderPlugin,\n @inject(Vue3PlatformBuilderPlugin) private platformBuilder: Vue3PlatformBuilderPlugin,\n @inject(Vue3MetaDataBuilderPlugin) private metaDataBuilder: Vue3MetaDataBuilderPlugin\n ) {}\n\n async assemble(\n ir: NASLAppIR,\n config: CommonAppConfig\n ): Promise<Record<string, InputFile | InputFile[]>> {\n const manager = new ComponentPathManager();\n const views = ir.views.flatMap((x) => {\n return this.vue3CodegenPlugin.genFiles(x, manager);\n });\n const bizComponents = ir.bizComponents.flatMap((x) => {\n return this.vue3CodegenPlugin.genFiles(x, manager);\n });\n let routePrefix = ir.configs.frontendDesc.path;\n if (!/\\/$/.test(routePrefix)) {\n routePrefix += '/';\n }\n const routesObjects = this.routesExtactor.extractRoute(ir.views, routePrefix, {\n lazy: true,\n });\n const router = this.routerBuilder.routeToCode(routesObjects.routes, manager, {\n frameworkKind: 'vue3',\n });\n const routerFile = new ReactFileDescription('router.ts', router.imports, [], [router.code]);\n const libraries = await this.librariesBuilder.buildLibrariesImport(ir, config);\n return {\n views,\n bizComponents,\n router: routerFile,\n metadata: this.metaDataBuilder.buildMeta(ir),\n entry: this.entryBuilder.buildEntry(ir),\n platform: this.platformBuilder.buildPlatformConfig(ir),\n clientLazyloadTemplate: this.clientLazyloadTemplateBuilder.buildClientLazyloadTemplate(ir),\n componentsIndex: this.componentsIndexBuilder.buildComponentsIndex(ir),\n libraries,\n entryCss: this.entryCssBuilder.buildLibrariesImport(ir),\n };\n }\n static install(container: Container) {\n container.bind(Vue3ApplicationAssemblerPlugin).toSelf().inTransientScope();\n container.bind(ComponentPathManager).toSelf();\n return container;\n }\n}\n","import { kebab2Pascal } from '@lcap/nasl-utils';\nimport { Container, injectable } from 'inversify';\nimport { notImplemented } from '../../../utils/assert';\nimport { isNotNil } from '../../../utils/types';\nimport { RouteIR } from '../../misc/routes-extraction-plugin';\nimport { ImportIR } from '../../react/react-codegen-plugin';\nimport { NameMangler, ReactRouterDefaultViewFolderName } from '../../react/react-router-plugin';\nimport { ComponentPathManager } from '../vue3/vue3-application-assembler-plugin';\n\n@injectable()\nexport class VueRouterPlugin {\n private extractImportIR(routes: RouteIR[], componentPathManager: ComponentPathManager) {\n const nameMangler = new NameMangler();\n const viewComponentImports: ImportIR[] = recursivelyExtractImportIR(routes);\n return { viewComponentImports };\n function recursivelyExtractImportIR(routes: RouteIR[]): ImportIR[] {\n return routes.flatMap((r) => {\n if (r.kind === 'normal') {\n const elementIdentifier = r.elementTemplate.identifier;\n if (elementIdentifier) {\n const path = componentPathManager.getPathOf(r.elementTemplate);\n const componentName = kebab2Pascal(elementIdentifier);\n const coalescedName = kebab2Pascal(\n `${path}${elementIdentifier}`.replaceAll('/', '-').replace(/^-/, '')\n );\n const mangledName = nameMangler.query(coalescedName);\n r.elementMangledName = mangledName;\n // FIXME 路由文件路径没有被修正\n const from = `./pages${path}/${componentName}.vue`;\n const importIR = {\n from,\n import: mangledName,\n lazy: r.lazy,\n };\n return [importIR, ...recursivelyExtractImportIR(r.children ?? [])];\n }\n }\n return [];\n });\n }\n }\n routeToCode(\n routes: RouteIR[],\n componentPathManager: ComponentPathManager,\n config: { frameworkKind: 'vue3' | 'vue2' | 'react' }\n ): { code: string; imports: ImportIR[] } {\n function serializeVueRoute(r: RouteIR, isRoot: boolean = false): string | undefined {\n const path = r.thisLevelPath ?? '/';\n if (r.kind === 'normal') {\n const children = r.children?.map((i) => serializeVueRoute(i)).filter(isNotNil) ?? [];\n const childrenStr = children.join(',\\n');\n const componentCode = `component: ${r.elementMangledName ?? r.elementTemplate.identifier}`;\n return `{path: \"${isRoot ? r.accumulativePath : path}\", meta: ${JSON.stringify(\n r.meta\n )}, children: [${childrenStr}], ${componentCode} \\}`;\n } else if (r.kind === 'redirect') {\n if (['vue3'].includes(config.frameworkKind) && path === '*') {\n return `{ path: \"/:pathMatch(.*)*\", redirect: ${JSON.stringify(r.redirect)} }`;\n }\n\n /**\n * vue-router 4.x 相对重定向\n * https://router.vuejs.org/zh/guide/essentials/redirect-and-alias.html#%E7%9B%B8%E5%AF%B9%E9%87%8D%E5%AE%9A%E5%90%91\n */\n return `{ path: \"${path}\", redirect: to => to.path.replace(/\\\\/$/, '') + '/' + ${JSON.stringify(r.redirect)} }`;\n }\n notImplemented(r);\n }\n const { viewComponentImports } = this.extractImportIR(routes, componentPathManager);\n const routesConfig = routes\n .map((i) => serializeVueRoute(i, true))\n .filter(isNotNil)\n .join(',\\n');\n const routerConfigStr = `export const routes = [${routesConfig}];\n `;\n const routerCode = routerConfigStr;\n return {\n code: routerCode,\n imports: [...viewComponentImports],\n };\n }\n static install(c: Container) {\n c.bind(VueRouterPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { kebab2Pascal } from '@lcap/nasl-utils';\nimport { GeneralComponentIR, NASLAppIR } from '../../../types/ir';\nimport { ComponentIRToPathDict, ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { FolderPath, folderPathToString } from '../../../utils/path';\nimport { flatten } from 'lodash';\nimport { ComponentPathManager } from './vue3-application-assembler-plugin';\n\n@injectable()\nexport class Vue3CodegenPlugin {\n /**\n * @deprecated\n * @param c\n * @param dict\n * @param folder\n * @param irConfig\n * @returns\n */\n genFiles(\n c: GeneralComponentIR,\n manager: ComponentPathManager,\n folder?: FolderPath,\n irConfig?: NASLAppIR['configs']\n ): ReactFileDescription[] {\n manager.markComponent(c, folder ? folderPathToString(folder) : `/`);\n const single = new ReactFileDescription(\n `${kebab2Pascal(c.identifier)}.vue`,\n [],\n [\n {\n getImports() {\n // TODO 遍历当前x中所引用的组件,添加可能的ImportIR\n return [];\n },\n toCode() {\n return { code: c.__raw.toVue({ isComposition: true }) };\n },\n },\n ],\n [],\n folder\n );\n return flatten([\n single,\n c.kind === 'view'\n ? c.childComponents.flatMap((child) => {\n return this.genFiles(\n child,\n manager,\n [...(folder ?? []), { name: c.identifier }],\n irConfig\n );\n })\n : [],\n ]);\n }\n\n static install(c: Container) {\n c.bind(Vue3CodegenPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable, inject } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { isNotNil } from '../../../utils/types';\nimport { MicroFrontendPlugin } from '../../misc/micro-frontend/micro-frontend-plugin';\n\n@injectable()\nexport class Vue3EntryBuilderPlugin {\n constructor(\n @inject(ServiceMetaKind.MicroFrontendManager) private microFrontendManager: MicroFrontendPlugin\n ) {}\n\n /**\n * 构建入口文件 main.ts\n * @param ir - NASL应用中间表示\n * @returns 平台配置文件描述\n */\n buildEntry(ir: NASLAppIR): ReactFileDescription[] {\n const entryScript = this.microFrontendManager.produceScript(ir);\n const publicPathScript = this.microFrontendManager.producePublicPathScript(ir);\n const code = `\n if(window.LcapMicro){\n // 已经被加载于微前端环境\n renderApp();\n }else{\n const loadAssets = renderApp;\n ${entryScript};\n }\n `;\n\n const imports = [\n {\n from: './helper',\n import: '{ renderApp }',\n },\n publicPathScript\n ? {\n from: './public-path',\n }\n : undefined,\n ].filter(isNotNil);\n\n return [\n new ReactFileDescription('main.ts', imports, [], [code]),\n publicPathScript\n ? new ReactFileDescription('public-path.ts', [], [], [publicPathScript])\n : undefined,\n ].filter(isNotNil) as ReactFileDescription[];\n }\n\n static install(c: Container) {\n c.bind(Vue3EntryBuilderPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { CommonAppConfig } from '../../../types/config';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { kebab2Pascal } from '../../../utils/str';\nimport { judgePackageZipExists } from '../../../utils/dependency-management';\n@injectable()\nexport class Vue3LibrariesBuilderPlugin {\n /**\n * 构建依赖库导入文件\n * @param ir - NASL应用中间表示\n * @returns 依赖库导入文件描述\n */\n async buildLibrariesImport(ir: NASLAppIR, config: CommonAppConfig) {\n const importArr: string[] = [];\n\n // 基础组件库\n const standardLib = ir.packages.find((x) => x.kind === 'standard');\n if (standardLib) {\n const formattedName = kebab2Pascal(standardLib.name.split('/').at(-1) as string);\n importArr.push(`export * as ${formattedName} from '${standardLib.name}';`);\n\n // 如果将 zip 下载到本地作为 node_modules,则需要将 dist-theme 路径加上。\n // 否则走的是 vite alias,alias 路径上已经有 /dist-theme 路径了。\n const isPackageZipExists = await judgePackageZipExists(standardLib, config.STATIC_URL);\n importArr.push(\n `import '${standardLib.name}${isPackageZipExists ? '/dist-theme' : ''}/index.css';`\n );\n }\n\n // 依赖库\n const extensions = ir.packages.filter((x) => x.kind === 'extension');\n for (const ext of extensions) {\n const formattedName = kebab2Pascal(ext.name.split('/').at(-1) as string);\n // 如果将 zip 下载到本地作为 node_modules,则需要将 dist-theme 路径加上。\n // 否则走的是 vite alias,alias 路径上已经有 /dist-theme 路径了。\n const isPackageZipExists = await judgePackageZipExists(ext, config.STATIC_URL);\n const prefix = isPackageZipExists ? '' : '@extension/';\n\n importArr.push(`export * as ${formattedName} from '${prefix}${ext.name}';`);\n if (ext.hasCss) {\n importArr.push(\n `import '${prefix}${ext.name}${isPackageZipExists ? '/dist-theme' : ''}/index.css';`\n );\n }\n }\n\n return new ReactFileDescription('libraries.ts', [], [], [importArr.join('\\n')]);\n }\n\n static install(c: Container) {\n c.bind(Vue3LibrariesBuilderPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\n\n@injectable()\nexport class Vue3MetaDataBuilderPlugin {\n /**\n * 构建依赖库导入文件\n * @param ir - NASL应用中间表示\n * @returns 依赖库导入文件描述\n */\n buildMeta(ir: NASLAppIR) {\n return new ReactFileDescription(\n 'metaData.js',\n [],\n [],\n [`export default ${stringifyMetaData(ir.configs.metaData)}`]\n );\n }\n\n static install(c: Container) {\n c.bind(Vue3MetaDataBuilderPlugin).toSelf();\n return c;\n }\n}\n\n// low-code-frontend-generator复制的代码\nfunction stringifyMetaData(obj: any) {\n // 处理对象类型\n if (typeof obj === 'object' && obj !== null) {\n if (Array.isArray(obj)) {\n // 处理数组类型\n const elements: string[] = obj.map((element) => stringifyMetaData(element));\n return `[${elements.join(',')}]`;\n }\n let newObj = obj;\n const properties: string[] = [];\n if (obj?.concept === 'FrontendVariable') {\n const { defaultValue, defaultCode } = obj;\n\n newObj = obj.toJSON() || {};\n newObj.defaultCode = defaultCode;\n\n const defaultValueFn = defaultValue?.toJS({ getVuePrototype: true });\n if (defaultCode.executeCode && defaultValueFn) {\n properties.push(`\"defaultValueFn\": () => {\n return ${defaultValueFn}\n }`);\n }\n }\n\n Object.keys(newObj).forEach((key) => {\n const value: string = stringifyMetaData(newObj[key]);\n if (value !== undefined) properties.push(`${stringifyMetaData(key)}: ${value}`);\n });\n return `{\n ${properties.join(',')}\n }`;\n }\n\n return JSON.stringify(obj, null, 2);\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { capitalizeFirstLetter } from '../../../utils/str';\n\n@injectable()\nexport class Vue3ComponentsIndexBuilderPlugin {\n /**\n * 构建业务组件导出入口文件\n * @param ir - NASL应用中间表示\n * @returns 平台配置文件描述\n */\n buildComponentsIndex(ir: NASLAppIR) {\n const importArr: string[] = [];\n ir.bizComponents.forEach((biz) => {\n importArr.push(\n `export { default as Bs${capitalizeFirstLetter(\n biz.identifier\n )} } from './${capitalizeFirstLetter(biz.identifier)}.vue';`\n );\n });\n return new ReactFileDescription(\n 'index.ts',\n [],\n [],\n [importArr.join('\\n')],\n [{ name: 'components' }]\n );\n }\n\n static install(c: Container) {\n c.bind(Vue3ComponentsIndexBuilderPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable, inject } from 'inversify';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { NASLAppIR } from '../../../types/ir';\nimport { MicroFrontendPlugin } from '../../misc/micro-frontend/micro-frontend-plugin';\n\n@injectable()\nexport class Vue3ClientLazyloadTemplateBuilderPlugin {\n constructor(\n @inject(ServiceMetaKind.MicroFrontendManager) private microFrontendManager: MicroFrontendPlugin\n ) {}\n\n /**\n * 构建 client.js 模板文件\n * @param ir - NASL应用中间表示\n */\n buildClientLazyloadTemplate(ir: NASLAppIR) {\n const isDebug = ir.configs.config.debug;\n const entryScript = this.microFrontendManager.produceScript(ir);\n\n return new ReactFileDescription(\n '../client-lazyload-template.ts',\n [],\n [],\n [\n `\n export default function (templateParameters, publicPath) {\n const { files } = templateParameters\n const jsAssets = files.js?.map((x) => publicPath + x.fileName) ?? []\n const cssAssets = files.css?.map((x) => publicPath + x.fileName) ?? []\n // 如果是debug模式,加载断点调试器\n ${\n isDebug\n ? `jsAssets.push(\n '${ir.configs.config.STATIC_URL}/packages/vue@2/dist/vue.min.js',\n '${\n ir.configs.config.STATIC_URL\n }/packages/@lcap/breakpoint-client@1.0.0/dist/index.js?time=${Date.now()}',\n );`\n : ''\n }\n const lazyLoadCommand = \\`\n \\${JSON.stringify(jsAssets)}.forEach(asset => window.LazyLoad.js(asset));\n window.LazyLoad.css(\\${JSON.stringify(cssAssets)});\n \\`;\n return \\`(function(){\n function loadAssets(){\n \\${lazyLoadCommand};\n }\n ${entryScript};\n })();\\`;\n }\n `,\n ]\n );\n }\n\n static install(c: Container) {\n c.bind(Vue3ClientLazyloadTemplateBuilderPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { routesExtractionPlugin } from '../../misc/routes-extraction-plugin';\nimport { PlatformConfig } from '../../misc/metadata-plugin';\nimport { jsonStringifyKeepUndefined } from '../../../utils/json';\n\n@injectable()\nexport class Vue3PlatformBuilderPlugin {\n /**\n * 构建平台配置文件\n * @param ir - NASL应用中间表示\n * @returns 平台配置文件描述\n */\n buildPlatformConfig(ir: NASLAppIR) {\n const self = {\n ...routesExtractionPlugin.functions,\n };\n const basePath = ir.configs.basePlatformConfig.basePath + '/';\n const { authResourcePaths, baseResourcePaths } = self.extractRoute(ir.views, basePath, {\n lazy: false,\n frameworkKind: 'vue3',\n });\n const platformConfig: PlatformConfig = {\n ...ir.configs.basePlatformConfig,\n authResourcePaths,\n baseResourcePaths,\n };\n return new ReactFileDescription(\n 'platform.config.ts',\n [],\n [],\n [`export default ${jsonStringifyKeepUndefined(platformConfig)}`]\n );\n }\n\n static install(c: Container) {\n c.bind(Vue3PlatformBuilderPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\n@injectable()\nexport class Vue3EntryCssPlugin {\n /**\n * 构建依赖库导入文件\n * @param ir - NASL应用中间表示\n * @returns 依赖库导入文件描述\n */\n buildLibrariesImport(ir: NASLAppIR) {\n const { themeCSS } = ir.configs;\n\n return new ReactFileDescription('index.css', [], [], [themeCSS]);\n }\n\n static install(c: Container) {\n c.bind(Vue3EntryCssPlugin).toSelf();\n return c;\n }\n}\n","import { App, Frontend } from '@lcap/nasl-concepts';\nimport { Container } from 'inversify';\nimport { OrganizedFile } from './plugins/misc/project-organization-plugin';\nimport { RspackConfigPlugin } from './plugins/misc/bundler/respack-config-plugin';\nimport { Generator, GeneratorInfrastructureDomain } from './service-interface';\nimport { ServiceMetaKind } from './service-metakind';\nimport { CommonAppConfig } from './types/config';\nimport { Logger } from './utils/logger';\n\ntype FS = GeneratorInfrastructureDomain.FileSystemProvider;\n\nexport async function translateNASLToApp(\n /**\n * NASL对象\n */\n app: App,\n frontend: Frontend,\n config: CommonAppConfig,\n baseDir: string = './out',\n container: Container,\n fs: FS\n): Promise<OrganizedFile[]> {\n const logger = Logger('翻译过程');\n logger.debug({ config });\n async function genCode() {\n logger.info('开始翻译');\n try {\n const codeList = await container\n .get<Generator.NASLTranspiler>(ServiceMetaKind.NASLTranspiler)\n .transpile({\n app,\n frontend,\n config,\n baseDir,\n });\n\n const frontendBundlerFileConfig = container.get<RspackConfigPlugin>(\n ServiceMetaKind.FrontendBundlerFileConfig\n );\n\n await frontendBundlerFileConfig.configBundlerConfig(\n app,\n frontend,\n config,\n fs,\n frontend.frameworkKind\n );\n\n if (container.isBound(ServiceMetaKind.CodeGenerationLifecycleHooks)) {\n const hooks = container.getAll<GeneratorInfrastructureDomain.CodeGenerationLifecycleHooks>(\n ServiceMetaKind.CodeGenerationLifecycleHooks\n );\n for (const h of hooks) {\n await h.afterAllFilesGenerated();\n }\n }\n\n return codeList;\n } catch (error) {\n logger.error(error);\n throw error;\n } finally {\n logger.info('翻译结束');\n }\n return undefined;\n }\n const codeList = await genCode();\n return codeList ?? [];\n}\n","import type { AxiosInstance } from 'axios';\n\nexport async function fetchFile<T>(url: string, axios: AxiosInstance, text?: boolean) {\n if (typeof window !== 'undefined' && typeof window.fetch !== 'undefined') {\n const response = await window.fetch(url);\n const data = (await text) ? response.text() : response.json();\n return data as T;\n }\n\n const response = await axios.get<T>(url, {\n responseType: text ? 'text' : 'json',\n responseEncoding: 'utf8',\n });\n\n if (response.status !== 200) {\n throw new Error('request error!');\n }\n\n return response.data;\n}\n","import { Container, injectable } from 'inversify';\nimport { CommonAppConfig, NASLDomain, ServiceMetaKind } from '../../..';\nimport type { App, Frontend } from '@lcap/nasl-concepts';\nimport { buildAsyncAnalyzer } from './analysis/async-analysis';\n\nexport type AnalyzerOptions = {\n asyncAnalysis?: boolean;\n};\n\nexport type AnalyzerManager = {\n setOptions(options: AnalyzerOptions): void;\n};\n\n@injectable()\nexport class AnalyzerManagerPlugin implements AnalyzerManager, NASLDomain.IRPreProcesser {\n preProcess(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig\n ): { app: App; frontend: Frontend; config: CommonAppConfig } {\n const analyzer = buildAsyncAnalyzer();\n if (this.getOptions().asyncAnalysis) {\n // @ts-expect-error\n app.analyzer = analyzer;\n }\n return { app, frontend, config };\n }\n private options: AnalyzerOptions = {};\n /**\n * 设置完整的分析选项\n * @param options\n */\n setOptions(options: AnalyzerOptions): void {\n this.options = options;\n }\n /**\n * 获取分析选项\n * @returns 分析选项\n */\n getOptions(): AnalyzerOptions {\n return this.options;\n }\n\n static install(c: Container) {\n c.bind(ServiceMetaKind.IRPreProcesser).to(AnalyzerManagerPlugin);\n c.bind(ServiceMetaKind.AnalyzerManager).to(AnalyzerManagerPlugin);\n }\n}\n","import { SyntaxNode } from '../../../../../../nasl-concepts/src';\n\ntype Analyzer<Result> = {\n query: (node: SyntaxNode) => Result;\n};\n\ntype IsAsync = boolean;\n\nexport function buildAsyncAnalyzer(): Analyzer<{ async: IsAsync }> {\n const resultCache: WeakMap<SyntaxNode, IsAsync> = new WeakMap();\n\n function isSubtreeAsync(\n node: SyntaxNode,\n analyzeFunc: (n: SyntaxNode) => IsAsync = analyze\n ): boolean {\n let hasAsync = false;\n node.traverseStrictChildrenWithPruning((n) => {\n // 这个函数有问题,显式跳过自身\n if (n === node) {\n return false;\n }\n if (hasAsync) {\n return true;\n } else if (n) {\n hasAsync = analyzeFunc(n);\n return hasAsync;\n }\n });\n return hasAsync;\n }\n function analyze(node: SyntaxNode) {\n if (!node) {\n return false;\n }\n if (resultCache.has(node)) {\n return resultCache.get(node)!;\n }\n function dispatch(node: SyntaxNode): IsAsync {\n switch (node.concept) {\n //#region 调用节点\n case 'CallLogic': {\n const calleeNode = node.getCallNode();\n return analyze(calleeNode) || isSubtreeAsync(node);\n }\n case 'CallInterface': {\n return true;\n }\n case 'CallFunction': {\n return isSubtreeAsync(node);\n }\n case 'Match': {\n return isSubtreeAsync(node);\n }\n case 'Function': {\n return isSubtreeAsync(node);\n }\n case 'JSBlock': {\n return true;\n }\n case 'ExternalDestination':\n case 'Destination': {\n return true;\n }\n case 'NewStructure':\n case 'NewComposite':\n case 'NewMap':\n case 'NewList': {\n return isSubtreeAsync(node);\n }\n //#endregion 调用节点\n\n //#region 定义节点\n case 'SubLogic': {\n return true;\n }\n case 'Logic': {\n if (node.likeComponent) {\n return node.subLogics?.some(analyze) || isSubtreeAsync(node);\n } else {\n // 谁懂这是什么逻辑。过近似视作异步。\n return true;\n }\n }\n case 'AnonymousFunction': {\n return isSubtreeAsync(node);\n }\n case 'BindEvent': {\n return node.logics?.some(analyze) ?? false;\n }\n case 'Interface':\n case 'OverriddenLogic': {\n return true;\n }\n //#endregion 定义节点\n default: {\n return isSubtreeAsync(node);\n }\n }\n }\n // 先标记为异步,防止循环\n resultCache.set(node, true);\n const res = dispatch(node);\n resultCache.set(node, res);\n return res;\n }\n return {\n query: (node) => {\n return { async: analyze(node) };\n },\n };\n}\n","import type { App, Frontend, FrontendType } from '@lcap/nasl-concepts';\nimport { Container, injectable } from 'inversify';\nimport { CommonAppConfig, NASLDomain, ServiceMetaKind } from '../../..';\nimport { NameMangler } from './name-mangler';\n\n@injectable()\nexport class NameManglerManagerPlugin implements NASLDomain.IRPreProcesser {\n preProcess(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig\n ): { app: App; frontend: Frontend; config: CommonAppConfig } {\n // 遍历app给View/BussinessComponent添加nameMangler\n\n frontend.views?.forEach((view) => {\n const mangler = NameMangler.mount(view);\n // 遍历局部变量\n view.variables?.forEach((v) => {\n mangler.occupyName(v.name);\n });\n });\n\n const frontendType = frontend?.parentNode as FrontendType;\n frontendType?.businessComponents?.forEach((bc) => {\n const mangler = NameMangler.mount(bc);\n // 遍历局部变量\n bc.variables?.forEach((v) => {\n mangler.occupyName(v.name);\n });\n });\n return { app, frontend, config };\n }\n\n static install(c: Container) {\n c.bind(ServiceMetaKind.IRPreProcesser).to(NameManglerManagerPlugin);\n c.bind(ServiceMetaKind.NameManglerManager).to(NameManglerManagerPlugin);\n }\n}\n","import { View, BusinessComponent } from '@lcap/nasl-concepts';\n\ntype Context = View | BusinessComponent;\n\nexport class NameMangler {\n rawNameMap: Map<string, string> = new Map();\n mangledNameCounter: Map<string, number> = new Map();\n\n // 假设rawName是唯一的\n makeUniqueName(uniqueName: string, rawName: string) {\n let name = this.rawNameMap.get(rawName);\n\n if (name) {\n return name;\n }\n\n let counter = 0;\n name = uniqueName;\n\n while (this.isNameOccupied(name)) {\n counter = this.mangledNameCounter.get(name) as number;\n name = uniqueName + counter;\n }\n\n this.rawNameMap.set(rawName, name);\n this.mangledNameCounter.set(name, counter + 1);\n\n return name || rawName;\n }\n\n isNameOccupied(name: string) {\n return (this.mangledNameCounter.get(name) ?? 0) > 0;\n }\n\n // 占用名称\n occupyName(name: string) {\n const counter = this.mangledNameCounter.get(name) ?? 0;\n this.mangledNameCounter.set(name, counter + 1);\n this.rawNameMap.set(name, name);\n }\n\n static mount(ctx: Context): NameMangler {\n // @ts-expect-error\n if (ctx.nameMangler) {\n // @ts-expect-error\n return ctx.nameMangler;\n }\n const mangler = new NameMangler();\n // @ts-expect-error\n ctx.nameMangler = mangler;\n return mangler;\n }\n}\n","import { isNil, isObject } from 'lodash';\nimport { Logger } from '..';\n\nconst logger = Logger('SanityCheck');\nexport function sanityCheck(appObject: Object | undefined, path: string[] = []) {\n if (isObject(appObject)) {\n if ('concept' in appObject && appObject?.concept === 'ViewElement') {\n // @ts-expect-error\n if ([isNil(appObject.name), appObject.name === ''].some(Boolean)) {\n const msg = `${JSON.stringify(path)}的name为空,这可能由脏数据导致,请报告此错误`;\n logger.error(msg);\n logger.error({appObject});\n throw new Error();\n }\n }\n Object.entries(appObject).forEach(([k, v]) => {\n sanityCheck(v, [...path, k]);\n });\n }\n}\n"],"mappings":"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","names":["exports","exports","module","path","fs","err","err2","er","er2","exports","module","path","exports","module","exports","module","queue","fs","path","options","cb","data","src","dest","flags","go$readdir","mode","exports","buffer","buffers","exports","module","path","exports","module","exports","module","exports","module","path","exports","module","path","exports","module","path","exports","module","path","destStat","exports","module","path","require_copy","exports","module","exports","module","path","exports","module","path","emptyDir","exports","module","path","exports","module","path","exports","module","path","exists","exports","module","exports","module","path","relative","exports","module","require_utils","exports","module","stringify","exports","module","stringify","readFileSync","require_jsonfile","exports","module","exports","module","path","outputFileSync","exports","module","stringify","exports","module","stringify","outputFileSync","exports","module","exports","module","path","exports","module","path","require_move","exports","module","exports","module","import_axios","import_lodash","import_inversify","import_reflection","import_inversify","pino","l","logger","import_lodash","import_nasl_concepts","import_asserts","breakpoint","import_nasl_concepts","import_lodash","config","module","app","process","import_inversify","import_lodash","import_nasl_concepts","import_nasl_concepts","import_asserts","import_inversify","import_lodash","logics","postcssJs","parserTypeScript","parserHtml","parserBabel","components","routePrefix","path","import_nasl_concepts","logger","import_nasl_concepts","import_nasl_concepts","import_inversify","import_lodash","import_nasl_concepts","logger","s","makeRight","calleeName","args","argsStr","isShowArgument","NaslAsyncFuncMap","getModule","code","destinationToUrlExpr","url","optional","routes","path","importConfigToPropertyStr","logger","children","node","shouldSplit","main","exports","c","logger","initExpr","config","module","logger","b","isView","elementName","x","bindManualBindEventToIR","l","ctx","config","buildConfigs","collectPackages","import_inversify","import_reflection","import_inversify","import_inversify","path","import_inversify","import_inversify","import_path","logger","config","path","s","config","l","logger","import_inversify","config","import_inversify","import_reflection","import_inversify","import_inversify","import_lodash","logger","import_inversify","import_nasl_concepts","import_nasl_concepts","import_inversify","logger","name","import_asserts","import_inversify","logger","name","res","import_inversify","logger","c","import_reflection","import_inversify","config","config","logger","import_asserts","logger","config","path","axios","sources","logger","config","import_reflection","import_inversify","config","config","import_reflection","import_inversify","config","import_inversify","import_nasl_utils","import_inversify","routes","path","config","import_inversify","import_nasl_utils","import_lodash","import_inversify","import_inversify","config","import_inversify","import_inversify","import_inversify","import_inversify","import_inversify","path","config","logger","config","logger","codeList","axios","response","path","config","logger","axios","import_inversify","node","config","import_inversify","NameMangler","config","NameMangler","import_lodash","logger","sanityCheck","path","logger","sanityCheck"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/universalify@2.0.1/node_modules/universalify/index.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/polyfills.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/legacy-streams.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/clone.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/graceful-fs.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/fs/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/mkdirs/utils.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/mkdirs/make-dir.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/mkdirs/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/path-exists/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/util/utimes.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/util/stat.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/copy/copy.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/copy/copy-sync.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/copy/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/remove/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/empty/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/file.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/link.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/symlink-paths.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/symlink-type.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/symlink.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/index.js","../../../node_modules/.pnpm/jsonfile@6.1.0/node_modules/jsonfile/utils.js","../../../node_modules/.pnpm/jsonfile@6.1.0/node_modules/jsonfile/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/jsonfile.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/output-file/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/output-json.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/output-json-sync.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/move/move.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/move/move-sync.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/move/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/index.js","../playground/helper.ts","../src/compile.ts","../src/default-container.ts","../src/plugins/vue/vue3/vue3-preset-plugin.ts","../src/service-metakind.ts","../src/utils/logger.ts","../src/utils/serialization.ts","../src/plugins/ir-builder-plugin.ts","../src/generator/genMetaData.ts","../src/generator/utils.ts","../src/utils/types.ts","../src/types/state.ts","../src/utils/assert.ts","../src/utils/component.ts","../src/utils/nasl.ts","../src/utils/str.ts","../src/utils/plugin.ts","../src/plugins/react/react-codegen-plugin.ts","../src/utils/json.ts","../src/utils/path.ts","../src/plugins/api-client-plugin.ts","../src/plugins/language/jsx-codegen-plugin.ts","../src/plugins/misc/code-format-plugin.ts","../src/plugins/misc/routes-extraction-plugin.ts","../src/plugins/react/react-component-lib-hack-plugin.ts","../src/plugins/react/react-router-plugin.ts","../src/plugins/language/javascript-codegen-plugin.ts","../src/plugins/language/asset/defaultErrorMessage.ts","../src/plugins/misc/logging/copied-log.ts","../src/plugins/misc/i18n-plugin.ts","../src/plugins/misc/metadata-plugin.ts","../src/hack/material-config/material.config.js","../src/hack/material-config/predefined-dependencies-manager.ts","../src/plugins/misc/entry-point/entry-point-plugin.ts","../src/plugins/react/react-preset-plugin.ts","../src/plugins/misc/file-system/file-system-plugin.ts","../src/plugins/misc/micro-frontend/micro-frontend-plugin.ts","../src/plugins/misc/micro-frontend/script/icestark.ts","../src/plugins/misc/micro-frontend/script/qiankun.ts","../src/plugins/misc/micro-frontend/script/wujie.ts","../src/plugins/misc/micro-frontend/script/microApp.ts","../src/plugins/misc/project-organization-plugin.ts","../src/plugins/misc/frontend-bundler-config-plugin.ts","../src/plugins/misc/frontend-performance-plugin.ts","../src/plugins/misc/life-cycle/life-cycle-plugin.ts","../src/plugins/misc/npm-package-manager-plugin.ts","../src/plugins/react/react-javascript-codegen-plugin.ts","../src/plugins/react/react-state-manager-vanilla-plugin.ts","../src/utils/syntax-node.ts","../src/plugins/react/react-state-manager-mobx-plugin.ts","../src/plugins/react/react-slot-plugin.ts","../src/plugins/misc/bundler/bundler-config-data-plugin.ts","../src/utils/url.ts","../src/utils/dependency-management.ts","../src/plugins/misc/bundler/rspack-config-plugin.ts","../src/plugins/vue/vue3/vue3-application-assembler-plugin.ts","../src/plugins/vue/common/vue-router-plugin.ts","../src/plugins/vue/vue3/vue3-codegen-plugin.ts","../src/plugins/vue/vue3/vue3-entry-builder-plugin.ts","../src/plugins/vue/vue3/vue3-libraries-builder-plugin.ts","../src/plugins/vue/vue3/vue3-meta-data-builder-plugin.ts","../src/plugins/vue/vue3/vue3-components-index-builder-plugin.ts","../src/plugins/vue/vue3/vue3-client-lazyload-template-builder-plugin .ts","../src/plugins/vue/vue3/vue3-platform-builder-plugin.ts","../src/plugins/vue/vue3/vue3-entry-css-plugin.ts","../src/translate-nasl-to-app.ts","../src/utils/fetchFile.ts","../src/plugins/misc/program-analysis/analyzer-manager-plugin.ts","../src/plugins/misc/program-analysis/analysis/async-analysis.ts","../src/plugins/misc/name-mangler/name-mangler-manager-plugin.ts","../src/plugins/misc/name-mangler/name-mangler.ts","../src/utils/sanity-check.ts"],"sourcesContent":["'use strict'\n\nexports.fromCallback = function (fn) {\n return Object.defineProperty(function (...args) {\n if (typeof args[args.length - 1] === 'function') fn.apply(this, args)\n else {\n return new Promise((resolve, reject) => {\n args.push((err, res) => (err != null) ? reject(err) : resolve(res))\n fn.apply(this, args)\n })\n }\n }, 'name', { value: fn.name })\n}\n\nexports.fromPromise = function (fn) {\n return Object.defineProperty(function (...args) {\n const cb = args[args.length - 1]\n if (typeof cb !== 'function') return fn.apply(this, args)\n else {\n args.pop()\n fn.apply(this, args).then(r => cb(null, r), cb)\n }\n }, 'name', { value: fn.name })\n}\n","var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n","var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n","'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n","var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n","'use strict'\n// This is adapted from https://github.com/normalize/mz\n// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors\nconst u = require('universalify').fromCallback\nconst fs = require('graceful-fs')\n\nconst api = [\n 'access',\n 'appendFile',\n 'chmod',\n 'chown',\n 'close',\n 'copyFile',\n 'fchmod',\n 'fchown',\n 'fdatasync',\n 'fstat',\n 'fsync',\n 'ftruncate',\n 'futimes',\n 'lchmod',\n 'lchown',\n 'link',\n 'lstat',\n 'mkdir',\n 'mkdtemp',\n 'open',\n 'opendir',\n 'readdir',\n 'readFile',\n 'readlink',\n 'realpath',\n 'rename',\n 'rm',\n 'rmdir',\n 'stat',\n 'symlink',\n 'truncate',\n 'unlink',\n 'utimes',\n 'writeFile'\n].filter(key => {\n // Some commands are not available on some systems. Ex:\n // fs.cp was added in Node.js v16.7.0\n // fs.lchown is not available on at least some Linux\n return typeof fs[key] === 'function'\n})\n\n// Export cloned fs:\nObject.assign(exports, fs)\n\n// Universalify async methods:\napi.forEach(method => {\n exports[method] = u(fs[method])\n})\n\n// We differ from mz/fs in that we still ship the old, broken, fs.exists()\n// since we are a drop-in replacement for the native module\nexports.exists = function (filename, callback) {\n if (typeof callback === 'function') {\n return fs.exists(filename, callback)\n }\n return new Promise(resolve => {\n return fs.exists(filename, resolve)\n })\n}\n\n// fs.read(), fs.write(), fs.readv(), & fs.writev() need special treatment due to multiple callback args\n\nexports.read = function (fd, buffer, offset, length, position, callback) {\n if (typeof callback === 'function') {\n return fs.read(fd, buffer, offset, length, position, callback)\n }\n return new Promise((resolve, reject) => {\n fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {\n if (err) return reject(err)\n resolve({ bytesRead, buffer })\n })\n })\n}\n\n// Function signature can be\n// fs.write(fd, buffer[, offset[, length[, position]]], callback)\n// OR\n// fs.write(fd, string[, position[, encoding]], callback)\n// We need to handle both cases, so we use ...args\nexports.write = function (fd, buffer, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.write(fd, buffer, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffer })\n })\n })\n}\n\n// Function signature is\n// s.readv(fd, buffers[, position], callback)\n// We need to handle the optional arg, so we use ...args\nexports.readv = function (fd, buffers, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.readv(fd, buffers, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.readv(fd, buffers, ...args, (err, bytesRead, buffers) => {\n if (err) return reject(err)\n resolve({ bytesRead, buffers })\n })\n })\n}\n\n// Function signature is\n// s.writev(fd, buffers[, position], callback)\n// We need to handle the optional arg, so we use ...args\nexports.writev = function (fd, buffers, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.writev(fd, buffers, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.writev(fd, buffers, ...args, (err, bytesWritten, buffers) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffers })\n })\n })\n}\n\n// fs.realpath.native sometimes not available if fs is monkey-patched\nif (typeof fs.realpath.native === 'function') {\n exports.realpath.native = u(fs.realpath.native)\n} else {\n process.emitWarning(\n 'fs.realpath.native is not a function. Is fs being monkey-patched?',\n 'Warning', 'fs-extra-WARN0003'\n )\n}\n","// Adapted from https://github.com/sindresorhus/make-dir\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict'\nconst path = require('path')\n\n// https://github.com/nodejs/node/issues/8987\n// https://github.com/libuv/libuv/pull/1088\nmodule.exports.checkPath = function checkPath (pth) {\n if (process.platform === 'win32') {\n const pathHasInvalidWinCharacters = /[<>:\"|?*]/.test(pth.replace(path.parse(pth).root, ''))\n\n if (pathHasInvalidWinCharacters) {\n const error = new Error(`Path contains invalid characters: ${pth}`)\n error.code = 'EINVAL'\n throw error\n }\n }\n}\n","'use strict'\nconst fs = require('../fs')\nconst { checkPath } = require('./utils')\n\nconst getMode = options => {\n const defaults = { mode: 0o777 }\n if (typeof options === 'number') return options\n return ({ ...defaults, ...options }).mode\n}\n\nmodule.exports.makeDir = async (dir, options) => {\n checkPath(dir)\n\n return fs.mkdir(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n\nmodule.exports.makeDirSync = (dir, options) => {\n checkPath(dir)\n\n return fs.mkdirSync(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n","'use strict'\nconst u = require('universalify').fromPromise\nconst { makeDir: _makeDir, makeDirSync } = require('./make-dir')\nconst makeDir = u(_makeDir)\n\nmodule.exports = {\n mkdirs: makeDir,\n mkdirsSync: makeDirSync,\n // alias\n mkdirp: makeDir,\n mkdirpSync: makeDirSync,\n ensureDir: makeDir,\n ensureDirSync: makeDirSync\n}\n","'use strict'\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\n\nfunction pathExists (path) {\n return fs.access(path).then(() => true).catch(() => false)\n}\n\nmodule.exports = {\n pathExists: u(pathExists),\n pathExistsSync: fs.existsSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst u = require('universalify').fromPromise\n\nasync function utimesMillis (path, atime, mtime) {\n // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)\n const fd = await fs.open(path, 'r+')\n\n let closeErr = null\n\n try {\n await fs.futimes(fd, atime, mtime)\n } finally {\n try {\n await fs.close(fd)\n } catch (e) {\n closeErr = e\n }\n }\n\n if (closeErr) {\n throw closeErr\n }\n}\n\nfunction utimesMillisSync (path, atime, mtime) {\n const fd = fs.openSync(path, 'r+')\n fs.futimesSync(fd, atime, mtime)\n return fs.closeSync(fd)\n}\n\nmodule.exports = {\n utimesMillis: u(utimesMillis),\n utimesMillisSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst u = require('universalify').fromPromise\n\nfunction getStats (src, dest, opts) {\n const statFunc = opts.dereference\n ? (file) => fs.stat(file, { bigint: true })\n : (file) => fs.lstat(file, { bigint: true })\n return Promise.all([\n statFunc(src),\n statFunc(dest).catch(err => {\n if (err.code === 'ENOENT') return null\n throw err\n })\n ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))\n}\n\nfunction getStatsSync (src, dest, opts) {\n let destStat\n const statFunc = opts.dereference\n ? (file) => fs.statSync(file, { bigint: true })\n : (file) => fs.lstatSync(file, { bigint: true })\n const srcStat = statFunc(src)\n try {\n destStat = statFunc(dest)\n } catch (err) {\n if (err.code === 'ENOENT') return { srcStat, destStat: null }\n throw err\n }\n return { srcStat, destStat }\n}\n\nasync function checkPaths (src, dest, funcName, opts) {\n const { srcStat, destStat } = await getStats(src, dest, opts)\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return { srcStat, destStat, isChangingCase: true }\n }\n throw new Error('Source and destination must not be the same.')\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n\n return { srcStat, destStat }\n}\n\nfunction checkPathsSync (src, dest, funcName, opts) {\n const { srcStat, destStat } = getStatsSync(src, dest, opts)\n\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return { srcStat, destStat, isChangingCase: true }\n }\n throw new Error('Source and destination must not be the same.')\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return { srcStat, destStat }\n}\n\n// recursively check if dest parent is a subdirectory of src.\n// It works for all file types including symlinks since it\n// checks the src and dest inodes. It starts from the deepest\n// parent and stops once it reaches the src parent or the root path.\nasync function checkParentPaths (src, srcStat, dest, funcName) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return\n\n let destStat\n try {\n destStat = await fs.stat(destParent, { bigint: true })\n } catch (err) {\n if (err.code === 'ENOENT') return\n throw err\n }\n\n if (areIdentical(srcStat, destStat)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n\n return checkParentPaths(src, srcStat, destParent, funcName)\n}\n\nfunction checkParentPathsSync (src, srcStat, dest, funcName) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return\n let destStat\n try {\n destStat = fs.statSync(destParent, { bigint: true })\n } catch (err) {\n if (err.code === 'ENOENT') return\n throw err\n }\n if (areIdentical(srcStat, destStat)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return checkParentPathsSync(src, srcStat, destParent, funcName)\n}\n\nfunction areIdentical (srcStat, destStat) {\n return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev\n}\n\n// return true if dest is a subdir of src, otherwise false.\n// It only checks the path strings.\nfunction isSrcSubdir (src, dest) {\n const srcArr = path.resolve(src).split(path.sep).filter(i => i)\n const destArr = path.resolve(dest).split(path.sep).filter(i => i)\n return srcArr.every((cur, i) => destArr[i] === cur)\n}\n\nfunction errMsg (src, dest, funcName) {\n return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`\n}\n\nmodule.exports = {\n // checkPaths\n checkPaths: u(checkPaths),\n checkPathsSync,\n // checkParent\n checkParentPaths: u(checkParentPaths),\n checkParentPathsSync,\n // Misc\n isSrcSubdir,\n areIdentical\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst { mkdirs } = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst { utimesMillis } = require('../util/utimes')\nconst stat = require('../util/stat')\n\nasync function copy (src, dest, opts = {}) {\n if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n process.emitWarning(\n 'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n 'Warning', 'fs-extra-WARN0001'\n )\n }\n\n const { srcStat, destStat } = await stat.checkPaths(src, dest, 'copy', opts)\n\n await stat.checkParentPaths(src, srcStat, dest, 'copy')\n\n const include = await runFilter(src, dest, opts)\n\n if (!include) return\n\n // check if the parent of dest exists, and create it if it doesn't exist\n const destParent = path.dirname(dest)\n const dirExists = await pathExists(destParent)\n if (!dirExists) {\n await mkdirs(destParent)\n }\n\n await getStatsAndPerformCopy(destStat, src, dest, opts)\n}\n\nasync function runFilter (src, dest, opts) {\n if (!opts.filter) return true\n return opts.filter(src, dest)\n}\n\nasync function getStatsAndPerformCopy (destStat, src, dest, opts) {\n const statFn = opts.dereference ? fs.stat : fs.lstat\n const srcStat = await statFn(src)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)\n\n if (\n srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()\n ) return onFile(srcStat, destStat, src, dest, opts)\n\n if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)\n if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)\n if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)\n throw new Error(`Unknown file: ${src}`)\n}\n\nasync function onFile (srcStat, destStat, src, dest, opts) {\n if (!destStat) return copyFile(srcStat, src, dest, opts)\n\n if (opts.overwrite) {\n await fs.unlink(dest)\n return copyFile(srcStat, src, dest, opts)\n }\n if (opts.errorOnExist) {\n throw new Error(`'${dest}' already exists`)\n }\n}\n\nasync function copyFile (srcStat, src, dest, opts) {\n await fs.copyFile(src, dest)\n if (opts.preserveTimestamps) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcStat.mode)) {\n await makeFileWritable(dest, srcStat.mode)\n }\n\n // Set timestamps and mode correspondingly\n\n // Note that The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n const updatedSrcStat = await fs.stat(src)\n await utimesMillis(dest, updatedSrcStat.atime, updatedSrcStat.mtime)\n }\n\n return fs.chmod(dest, srcStat.mode)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode) {\n return fs.chmod(dest, srcMode | 0o200)\n}\n\nasync function onDir (srcStat, destStat, src, dest, opts) {\n // the dest directory might not exist, create it\n if (!destStat) {\n await fs.mkdir(dest)\n }\n\n const items = await fs.readdir(src)\n\n // loop through the files in the current directory to copy everything\n await Promise.all(items.map(async item => {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n\n // skip the item if it is matches by the filter function\n const include = await runFilter(srcItem, destItem, opts)\n if (!include) return\n\n const { destStat } = await stat.checkPaths(srcItem, destItem, 'copy', opts)\n\n // If the item is a copyable file, `getStatsAndPerformCopy` will copy it\n // If the item is a directory, `getStatsAndPerformCopy` will call `onDir` recursively\n return getStatsAndPerformCopy(destStat, srcItem, destItem, opts)\n }))\n\n if (!destStat) {\n await fs.chmod(dest, srcStat.mode)\n }\n}\n\nasync function onLink (destStat, src, dest, opts) {\n let resolvedSrc = await fs.readlink(src)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n if (!destStat) {\n return fs.symlink(resolvedSrc, dest)\n }\n\n let resolvedDest = null\n try {\n resolvedDest = await fs.readlink(dest)\n } catch (e) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (e.code === 'EINVAL' || e.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest)\n throw e\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)\n }\n\n // do not copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)\n }\n\n // copy the link\n await fs.unlink(dest)\n return fs.symlink(resolvedSrc, dest)\n}\n\nmodule.exports = copy\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdirsSync = require('../mkdirs').mkdirsSync\nconst utimesMillisSync = require('../util/utimes').utimesMillisSync\nconst stat = require('../util/stat')\n\nfunction copySync (src, dest, opts) {\n if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n opts = opts || {}\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n process.emitWarning(\n 'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n 'Warning', 'fs-extra-WARN0002'\n )\n }\n\n const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'copy')\n if (opts.filter && !opts.filter(src, dest)) return\n const destParent = path.dirname(dest)\n if (!fs.existsSync(destParent)) mkdirsSync(destParent)\n return getStats(destStat, src, dest, opts)\n}\n\nfunction getStats (destStat, src, dest, opts) {\n const statSync = opts.dereference ? fs.statSync : fs.lstatSync\n const srcStat = statSync(src)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)\n else if (srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)\n else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)\n else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)\n else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)\n throw new Error(`Unknown file: ${src}`)\n}\n\nfunction onFile (srcStat, destStat, src, dest, opts) {\n if (!destStat) return copyFile(srcStat, src, dest, opts)\n return mayCopyFile(srcStat, src, dest, opts)\n}\n\nfunction mayCopyFile (srcStat, src, dest, opts) {\n if (opts.overwrite) {\n fs.unlinkSync(dest)\n return copyFile(srcStat, src, dest, opts)\n } else if (opts.errorOnExist) {\n throw new Error(`'${dest}' already exists`)\n }\n}\n\nfunction copyFile (srcStat, src, dest, opts) {\n fs.copyFileSync(src, dest)\n if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)\n return setDestMode(dest, srcStat.mode)\n}\n\nfunction handleTimestamps (srcMode, src, dest) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)\n return setDestTimestamps(src, dest)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode) {\n return setDestMode(dest, srcMode | 0o200)\n}\n\nfunction setDestMode (dest, srcMode) {\n return fs.chmodSync(dest, srcMode)\n}\n\nfunction setDestTimestamps (src, dest) {\n // The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n const updatedSrcStat = fs.statSync(src)\n return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)\n}\n\nfunction onDir (srcStat, destStat, src, dest, opts) {\n if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)\n return copyDir(src, dest, opts)\n}\n\nfunction mkDirAndCopy (srcMode, src, dest, opts) {\n fs.mkdirSync(dest)\n copyDir(src, dest, opts)\n return setDestMode(dest, srcMode)\n}\n\nfunction copyDir (src, dest, opts) {\n fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))\n}\n\nfunction copyDirItem (item, src, dest, opts) {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n if (opts.filter && !opts.filter(srcItem, destItem)) return\n const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)\n return getStats(destStat, srcItem, destItem, opts)\n}\n\nfunction onLink (destStat, src, dest, opts) {\n let resolvedSrc = fs.readlinkSync(src)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n\n if (!destStat) {\n return fs.symlinkSync(resolvedSrc, dest)\n } else {\n let resolvedDest\n try {\n resolvedDest = fs.readlinkSync(dest)\n } catch (err) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)\n throw err\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)\n }\n\n // prevent copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)\n }\n return copyLink(resolvedSrc, dest)\n }\n}\n\nfunction copyLink (resolvedSrc, dest) {\n fs.unlinkSync(dest)\n return fs.symlinkSync(resolvedSrc, dest)\n}\n\nmodule.exports = copySync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nmodule.exports = {\n copy: u(require('./copy')),\n copySync: require('./copy-sync')\n}\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst u = require('universalify').fromCallback\n\nfunction remove (path, callback) {\n fs.rm(path, { recursive: true, force: true }, callback)\n}\n\nfunction removeSync (path) {\n fs.rmSync(path, { recursive: true, force: true })\n}\n\nmodule.exports = {\n remove: u(remove),\n removeSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst remove = require('../remove')\n\nconst emptyDir = u(async function emptyDir (dir) {\n let items\n try {\n items = await fs.readdir(dir)\n } catch {\n return mkdir.mkdirs(dir)\n }\n\n return Promise.all(items.map(item => remove.remove(path.join(dir, item))))\n})\n\nfunction emptyDirSync (dir) {\n let items\n try {\n items = fs.readdirSync(dir)\n } catch {\n return mkdir.mkdirsSync(dir)\n }\n\n items.forEach(item => {\n item = path.join(dir, item)\n remove.removeSync(item)\n })\n}\n\nmodule.exports = {\n emptyDirSync,\n emptydirSync: emptyDirSync,\n emptyDir,\n emptydir: emptyDir\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\nconst mkdir = require('../mkdirs')\n\nasync function createFile (file) {\n let stats\n try {\n stats = await fs.stat(file)\n } catch { }\n if (stats && stats.isFile()) return\n\n const dir = path.dirname(file)\n\n let dirStats = null\n try {\n dirStats = await fs.stat(dir)\n } catch (err) {\n // if the directory doesn't exist, make it\n if (err.code === 'ENOENT') {\n await mkdir.mkdirs(dir)\n await fs.writeFile(file, '')\n return\n } else {\n throw err\n }\n }\n\n if (dirStats.isDirectory()) {\n await fs.writeFile(file, '')\n } else {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n await fs.readdir(dir)\n }\n}\n\nfunction createFileSync (file) {\n let stats\n try {\n stats = fs.statSync(file)\n } catch { }\n if (stats && stats.isFile()) return\n\n const dir = path.dirname(file)\n try {\n if (!fs.statSync(dir).isDirectory()) {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n fs.readdirSync(dir)\n }\n } catch (err) {\n // If the stat call above failed because the directory doesn't exist, create it\n if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)\n else throw err\n }\n\n fs.writeFileSync(file, '')\n}\n\nmodule.exports = {\n createFile: u(createFile),\n createFileSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\nconst mkdir = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst { areIdentical } = require('../util/stat')\n\nasync function createLink (srcpath, dstpath) {\n let dstStat\n try {\n dstStat = await fs.lstat(dstpath)\n } catch {\n // ignore error\n }\n\n let srcStat\n try {\n srcStat = await fs.lstat(srcpath)\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n throw err\n }\n\n if (dstStat && areIdentical(srcStat, dstStat)) return\n\n const dir = path.dirname(dstpath)\n\n const dirExists = await pathExists(dir)\n\n if (!dirExists) {\n await mkdir.mkdirs(dir)\n }\n\n await fs.link(srcpath, dstpath)\n}\n\nfunction createLinkSync (srcpath, dstpath) {\n let dstStat\n try {\n dstStat = fs.lstatSync(dstpath)\n } catch {}\n\n try {\n const srcStat = fs.lstatSync(srcpath)\n if (dstStat && areIdentical(srcStat, dstStat)) return\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n throw err\n }\n\n const dir = path.dirname(dstpath)\n const dirExists = fs.existsSync(dir)\n if (dirExists) return fs.linkSync(srcpath, dstpath)\n mkdir.mkdirsSync(dir)\n\n return fs.linkSync(srcpath, dstpath)\n}\n\nmodule.exports = {\n createLink: u(createLink),\n createLinkSync\n}\n","'use strict'\n\nconst path = require('path')\nconst fs = require('../fs')\nconst { pathExists } = require('../path-exists')\n\nconst u = require('universalify').fromPromise\n\n/**\n * Function that returns two types of paths, one relative to symlink, and one\n * relative to the current working directory. Checks if path is absolute or\n * relative. If the path is relative, this function checks if the path is\n * relative to symlink or relative to current working directory. This is an\n * initiative to find a smarter `srcpath` to supply when building symlinks.\n * This allows you to determine which path to use out of one of three possible\n * types of source paths. The first is an absolute path. This is detected by\n * `path.isAbsolute()`. When an absolute path is provided, it is checked to\n * see if it exists. If it does it's used, if not an error is returned\n * (callback)/ thrown (sync). The other two options for `srcpath` are a\n * relative url. By default Node's `fs.symlink` works by creating a symlink\n * using `dstpath` and expects the `srcpath` to be relative to the newly\n * created symlink. If you provide a `srcpath` that does not exist on the file\n * system it results in a broken symlink. To minimize this, the function\n * checks to see if the 'relative to symlink' source file exists, and if it\n * does it will use it. If it does not, it checks if there's a file that\n * exists that is relative to the current working directory, if does its used.\n * This preserves the expectations of the original fs.symlink spec and adds\n * the ability to pass in `relative to current working direcotry` paths.\n */\n\nasync function symlinkPaths (srcpath, dstpath) {\n if (path.isAbsolute(srcpath)) {\n try {\n await fs.lstat(srcpath)\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n throw err\n }\n\n return {\n toCwd: srcpath,\n toDst: srcpath\n }\n }\n\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n\n const exists = await pathExists(relativeToDst)\n if (exists) {\n return {\n toCwd: relativeToDst,\n toDst: srcpath\n }\n }\n\n try {\n await fs.lstat(srcpath)\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n throw err\n }\n\n return {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n }\n}\n\nfunction symlinkPathsSync (srcpath, dstpath) {\n if (path.isAbsolute(srcpath)) {\n const exists = fs.existsSync(srcpath)\n if (!exists) throw new Error('absolute srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: srcpath\n }\n }\n\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n const exists = fs.existsSync(relativeToDst)\n if (exists) {\n return {\n toCwd: relativeToDst,\n toDst: srcpath\n }\n }\n\n const srcExists = fs.existsSync(srcpath)\n if (!srcExists) throw new Error('relative srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n }\n}\n\nmodule.exports = {\n symlinkPaths: u(symlinkPaths),\n symlinkPathsSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst u = require('universalify').fromPromise\n\nasync function symlinkType (srcpath, type) {\n if (type) return type\n\n let stats\n try {\n stats = await fs.lstat(srcpath)\n } catch {\n return 'file'\n }\n\n return (stats && stats.isDirectory()) ? 'dir' : 'file'\n}\n\nfunction symlinkTypeSync (srcpath, type) {\n if (type) return type\n\n let stats\n try {\n stats = fs.lstatSync(srcpath)\n } catch {\n return 'file'\n }\n return (stats && stats.isDirectory()) ? 'dir' : 'file'\n}\n\nmodule.exports = {\n symlinkType: u(symlinkType),\n symlinkTypeSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\n\nconst { mkdirs, mkdirsSync } = require('../mkdirs')\n\nconst { symlinkPaths, symlinkPathsSync } = require('./symlink-paths')\nconst { symlinkType, symlinkTypeSync } = require('./symlink-type')\n\nconst { pathExists } = require('../path-exists')\n\nconst { areIdentical } = require('../util/stat')\n\nasync function createSymlink (srcpath, dstpath, type) {\n let stats\n try {\n stats = await fs.lstat(dstpath)\n } catch { }\n\n if (stats && stats.isSymbolicLink()) {\n const [srcStat, dstStat] = await Promise.all([\n fs.stat(srcpath),\n fs.stat(dstpath)\n ])\n\n if (areIdentical(srcStat, dstStat)) return\n }\n\n const relative = await symlinkPaths(srcpath, dstpath)\n srcpath = relative.toDst\n const toType = await symlinkType(relative.toCwd, type)\n const dir = path.dirname(dstpath)\n\n if (!(await pathExists(dir))) {\n await mkdirs(dir)\n }\n\n return fs.symlink(srcpath, dstpath, toType)\n}\n\nfunction createSymlinkSync (srcpath, dstpath, type) {\n let stats\n try {\n stats = fs.lstatSync(dstpath)\n } catch { }\n if (stats && stats.isSymbolicLink()) {\n const srcStat = fs.statSync(srcpath)\n const dstStat = fs.statSync(dstpath)\n if (areIdentical(srcStat, dstStat)) return\n }\n\n const relative = symlinkPathsSync(srcpath, dstpath)\n srcpath = relative.toDst\n type = symlinkTypeSync(relative.toCwd, type)\n const dir = path.dirname(dstpath)\n const exists = fs.existsSync(dir)\n if (exists) return fs.symlinkSync(srcpath, dstpath, type)\n mkdirsSync(dir)\n return fs.symlinkSync(srcpath, dstpath, type)\n}\n\nmodule.exports = {\n createSymlink: u(createSymlink),\n createSymlinkSync\n}\n","'use strict'\n\nconst { createFile, createFileSync } = require('./file')\nconst { createLink, createLinkSync } = require('./link')\nconst { createSymlink, createSymlinkSync } = require('./symlink')\n\nmodule.exports = {\n // file\n createFile,\n createFileSync,\n ensureFile: createFile,\n ensureFileSync: createFileSync,\n // link\n createLink,\n createLinkSync,\n ensureLink: createLink,\n ensureLinkSync: createLinkSync,\n // symlink\n createSymlink,\n createSymlinkSync,\n ensureSymlink: createSymlink,\n ensureSymlinkSync: createSymlinkSync\n}\n","function stringify (obj, { EOL = '\\n', finalEOL = true, replacer = null, spaces } = {}) {\n const EOF = finalEOL ? EOL : ''\n const str = JSON.stringify(obj, replacer, spaces)\n\n return str.replace(/\\n/g, EOL) + EOF\n}\n\nfunction stripBom (content) {\n // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified\n if (Buffer.isBuffer(content)) content = content.toString('utf8')\n return content.replace(/^\\uFEFF/, '')\n}\n\nmodule.exports = { stringify, stripBom }\n","let _fs\ntry {\n _fs = require('graceful-fs')\n} catch (_) {\n _fs = require('fs')\n}\nconst universalify = require('universalify')\nconst { stringify, stripBom } = require('./utils')\n\nasync function _readFile (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n let data = await universalify.fromCallback(fs.readFile)(file, options)\n\n data = stripBom(data)\n\n let obj\n try {\n obj = JSON.parse(data, options ? options.reviver : null)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n\n return obj\n}\n\nconst readFile = universalify.fromPromise(_readFile)\n\nfunction readFileSync (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n try {\n let content = fs.readFileSync(file, options)\n content = stripBom(content)\n return JSON.parse(content, options.reviver)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n}\n\nasync function _writeFile (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n\n await universalify.fromCallback(fs.writeFile)(file, str, options)\n}\n\nconst writeFile = universalify.fromPromise(_writeFile)\n\nfunction writeFileSync (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n // not sure if fs.writeFileSync returns anything, but just in case\n return fs.writeFileSync(file, str, options)\n}\n\nconst jsonfile = {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync\n}\n\nmodule.exports = jsonfile\n","'use strict'\n\nconst jsonFile = require('jsonfile')\n\nmodule.exports = {\n // jsonfile exports\n readJson: jsonFile.readFile,\n readJsonSync: jsonFile.readFileSync,\n writeJson: jsonFile.writeFile,\n writeJsonSync: jsonFile.writeFileSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst pathExists = require('../path-exists').pathExists\n\nasync function outputFile (file, data, encoding = 'utf-8') {\n const dir = path.dirname(file)\n\n if (!(await pathExists(dir))) {\n await mkdir.mkdirs(dir)\n }\n\n return fs.writeFile(file, data, encoding)\n}\n\nfunction outputFileSync (file, ...args) {\n const dir = path.dirname(file)\n if (!fs.existsSync(dir)) {\n mkdir.mkdirsSync(dir)\n }\n\n fs.writeFileSync(file, ...args)\n}\n\nmodule.exports = {\n outputFile: u(outputFile),\n outputFileSync\n}\n","'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFile } = require('../output-file')\n\nasync function outputJson (file, data, options = {}) {\n const str = stringify(data, options)\n\n await outputFile(file, str, options)\n}\n\nmodule.exports = outputJson\n","'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFileSync } = require('../output-file')\n\nfunction outputJsonSync (file, data, options) {\n const str = stringify(data, options)\n\n outputFileSync(file, str, options)\n}\n\nmodule.exports = outputJsonSync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst jsonFile = require('./jsonfile')\n\njsonFile.outputJson = u(require('./output-json'))\njsonFile.outputJsonSync = require('./output-json-sync')\n// aliases\njsonFile.outputJSON = jsonFile.outputJson\njsonFile.outputJSONSync = jsonFile.outputJsonSync\njsonFile.writeJSON = jsonFile.writeJson\njsonFile.writeJSONSync = jsonFile.writeJsonSync\njsonFile.readJSON = jsonFile.readJson\njsonFile.readJSONSync = jsonFile.readJsonSync\n\nmodule.exports = jsonFile\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst { copy } = require('../copy')\nconst { remove } = require('../remove')\nconst { mkdirp } = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst stat = require('../util/stat')\n\nasync function move (src, dest, opts = {}) {\n const overwrite = opts.overwrite || opts.clobber || false\n\n const { srcStat, isChangingCase = false } = await stat.checkPaths(src, dest, 'move', opts)\n\n await stat.checkParentPaths(src, srcStat, dest, 'move')\n\n // If the parent of dest is not root, make sure it exists before proceeding\n const destParent = path.dirname(dest)\n const parsedParentPath = path.parse(destParent)\n if (parsedParentPath.root !== destParent) {\n await mkdirp(destParent)\n }\n\n return doRename(src, dest, overwrite, isChangingCase)\n}\n\nasync function doRename (src, dest, overwrite, isChangingCase) {\n if (!isChangingCase) {\n if (overwrite) {\n await remove(dest)\n } else if (await pathExists(dest)) {\n throw new Error('dest already exists.')\n }\n }\n\n try {\n // Try w/ rename first, and try copy + remove if EXDEV\n await fs.rename(src, dest)\n } catch (err) {\n if (err.code !== 'EXDEV') {\n throw err\n }\n await moveAcrossDevice(src, dest, overwrite)\n }\n}\n\nasync function moveAcrossDevice (src, dest, overwrite) {\n const opts = {\n overwrite,\n errorOnExist: true,\n preserveTimestamps: true\n }\n\n await copy(src, dest, opts)\n return remove(src)\n}\n\nmodule.exports = move\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst copySync = require('../copy').copySync\nconst removeSync = require('../remove').removeSync\nconst mkdirpSync = require('../mkdirs').mkdirpSync\nconst stat = require('../util/stat')\n\nfunction moveSync (src, dest, opts) {\n opts = opts || {}\n const overwrite = opts.overwrite || opts.clobber || false\n\n const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'move')\n if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))\n return doRename(src, dest, overwrite, isChangingCase)\n}\n\nfunction isParentRoot (dest) {\n const parent = path.dirname(dest)\n const parsedPath = path.parse(parent)\n return parsedPath.root === parent\n}\n\nfunction doRename (src, dest, overwrite, isChangingCase) {\n if (isChangingCase) return rename(src, dest, overwrite)\n if (overwrite) {\n removeSync(dest)\n return rename(src, dest, overwrite)\n }\n if (fs.existsSync(dest)) throw new Error('dest already exists.')\n return rename(src, dest, overwrite)\n}\n\nfunction rename (src, dest, overwrite) {\n try {\n fs.renameSync(src, dest)\n } catch (err) {\n if (err.code !== 'EXDEV') throw err\n return moveAcrossDevice(src, dest, overwrite)\n }\n}\n\nfunction moveAcrossDevice (src, dest, overwrite) {\n const opts = {\n overwrite,\n errorOnExist: true,\n preserveTimestamps: true\n }\n copySync(src, dest, opts)\n return removeSync(src)\n}\n\nmodule.exports = moveSync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nmodule.exports = {\n move: u(require('./move')),\n moveSync: require('./move-sync')\n}\n","'use strict'\n\nmodule.exports = {\n // Export promiseified graceful-fs:\n ...require('./fs'),\n // Export extra methods:\n ...require('./copy'),\n ...require('./empty'),\n ...require('./ensure'),\n ...require('./json'),\n ...require('./mkdirs'),\n ...require('./move'),\n ...require('./output-file'),\n ...require('./path-exists'),\n ...require('./remove')\n}\n","import { Container } from 'inversify';\nimport { readFileSync } from 'node:fs';\nimport * as path from 'node:path';\nimport { outputFileSync } from 'fs-extra';\nimport { Logger } from '../src';\nimport { compileAsProject } from '../src/compile';\nimport { sanityCheck } from '../src/utils/sanity-check';\nimport { deserializeAppWhileKeepTypeAnnotation } from '../src/utils/serialization';\n\nconst config = {\n debug: false,\n nuimsDomain: 'user.lcap.codewave-test.163yun.com',\n kubeInsightAppCluster: 'drill',\n officialTenantId: '00000000000000000000000000000000',\n enableOpenAiCompletionForLogic: true,\n pwdSecurity: {\n pwdCategory: 'normal',\n },\n tenantAndAppMaxLength: 32,\n platformCreateDatabaseOpen: false,\n documentCenter: {\n isLocalDeployment: false,\n deliveryMode: 'online',\n url: 'https://community.codewave.163.com/CommunityParent',\n },\n lcpRedirectSwitch: true,\n kubeInsightAddress: '',\n gatewayType: 'light',\n STATIC_URL: '//minio-api.codewave-test.163yun.com/lowcode-static',\n traceSwitch: false,\n resourceAssignStrategy: 'app',\n creatorIsManager: false,\n websqlSwitch: 'dev,online',\n enableCodeWaveMarket: false,\n platformEnv: 'dev',\n IDE_STATIC_URL: '//minio-api.codewave-test.163yun.com/lowcode-static',\n isPrivatized: 'true',\n clientToken: 'ODDINZU1OWYTZWM5NY0ZZJEYLTK3NGQTNWNJNJQYYMM0OGM1',\n biConfig: false,\n platformExtraAbilityDetail: null,\n USER_STATIC_URL: '//minio-api.codewave-test.163yun.com/lowcode-static',\n kubeInsightServiceName: 'codewave#lcap-fe',\n consoleDomain: '',\n enableOpenAiForLogic: true,\n lowcodeDomain: 'lcap.codewave-test.163yun.com',\n name: 'lcap',\n tenantIntegrationSwitch: false,\n envNuimsDomain: {\n dev: 'user.lcap.codewave-test.163yun.com',\n online: 'user.lcap.codewave-test.163yun.com',\n },\n envLcpDomain: {\n dev: {\n lcpDomain: 'lcap.codewave-test.163yun.com',\n },\n online: {\n lcpDomain: 'lcap.codewave-test.163yun.com',\n },\n },\n kubeClientApplicationKey: 'lcp-drill',\n tenant: 'defaulttenant',\n env: 'dev',\n tenantID: '00000000000000000000000000000000',\n multiEnvEnable: true,\n tenantType: 0,\n tenantLevel: 1,\n tenantLevelDetail: {\n onlineReplicasLimit: '3',\n aiJavaLogicCompletionDisplay: 'true',\n releaseDevAppCountLimit: '-1',\n customPackageSupport: 'true',\n aiNl2sqlSupport: 'false',\n aiNextComponentSupport: 'true',\n productAppSpecification: '1',\n configDatabaseSupport: 'true',\n aiJavaLogicDisplay: 'true',\n appPublishOnlineSupport: 'true',\n rdsMode: '0',\n assetsLibraryExportSupport: 'true',\n assignDeveloperSupport: 'true',\n cpuLimit: '4',\n configSourceCodeSupport: 'true',\n mavenConfigEditSupport: 'true',\n aiCodeAnalyzeSupport: 'false',\n aiNl2LogicSupport: 'false',\n onboardingSupport: 'false',\n storageLimit: '8',\n releaseAppCountLimit: '4',\n configFrontSupport: 'true',\n configFileStorageSupport: 'true',\n aiNl2sqlDisplay: 'true',\n teamDeveloperSupport: 'true',\n accountLimit: '-1',\n aiD2CSupport: 'false',\n exportSourceSupport: 'true',\n customDomainSupport: 'true',\n reportFormsEditSupport: 'true',\n aiNl2LogicDisplay: 'true',\n memoryLimit: '8',\n aiJavaLogicCompletionSupport: 'false',\n assetsArchetypeSupport: 'true',\n appCreateLimit: '-1',\n configImageRepoSupport: 'true',\n configSourceSupport: 'true',\n aiJavaLogicSupport: 'false',\n assetsTemplateExportSupport: 'true',\n },\n tenantExtraAbilityDetail: null,\n tenantVersion: {\n tenantName: 'defaulttenant',\n versionType: 4,\n versionId: '2417a61d7e9a4cb7b5ed2d83d29cc5fa',\n snapshotId: 'c8885750ba4f48eea67f85fc965f71f8',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n changeStatus: 0,\n changeDesc: null,\n createdTime: '2024-02-02 12:44:02',\n updatedTime: '2024-02-02 12:44:02',\n businessVersionDTO: {\n versionType: 4,\n versionId: '2417a61d7e9a4cb7b5ed2d83d29cc5fa',\n snapshotId: 'c8885750ba4f48eea67f85fc965f71f8',\n versionName: '私有化企业版',\n description: '私有化企业版',\n resourceList: null,\n createdTime: '2024-02-02 12:26:04',\n updatedTime: '2024-02-02 12:26:04',\n },\n resourceList: [\n {\n resourceItem: 'onlineReplicasLimit',\n resourceValue: '3',\n },\n {\n resourceItem: 'aiJavaLogicCompletionDisplay',\n resourceValue: 'true',\n },\n {\n resourceItem: 'releaseDevAppCountLimit',\n resourceValue: '-1',\n },\n {\n resourceItem: 'customPackageSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiNl2sqlSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'aiNextComponentSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'productAppSpecification',\n resourceValue: '1',\n },\n {\n resourceItem: 'configDatabaseSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiJavaLogicDisplay',\n resourceValue: 'true',\n },\n {\n resourceItem: 'appPublishOnlineSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'rdsMode',\n resourceValue: '0',\n },\n {\n resourceItem: 'assetsLibraryExportSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'assignDeveloperSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'cpuLimit',\n resourceValue: '4',\n },\n {\n resourceItem: 'configSourceCodeSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'mavenConfigEditSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiNl2LogicSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'aiCodeAnalyzeSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'onboardingSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'storageLimit',\n resourceValue: '8',\n },\n {\n resourceItem: 'releaseAppCountLimit',\n resourceValue: '4',\n },\n {\n resourceItem: 'configFrontSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'configFileStorageSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'accountLimit',\n resourceValue: '-1',\n },\n {\n resourceItem: 'teamDeveloperSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiNl2sqlDisplay',\n resourceValue: 'true',\n },\n {\n resourceItem: 'exportSourceSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiD2CSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'customDomainSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'reportFormsEditSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'memoryLimit',\n resourceValue: '8',\n },\n {\n resourceItem: 'aiNl2LogicDisplay',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiJavaLogicCompletionSupport',\n resourceValue: 'false',\n },\n {\n resourceItem: 'appCreateLimit',\n resourceValue: '-1',\n },\n {\n resourceItem: 'assetsArchetypeSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'configSourceSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'configImageRepoSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'assetsTemplateExportSupport',\n resourceValue: 'true',\n },\n {\n resourceItem: 'aiJavaLogicSupport',\n resourceValue: 'false',\n },\n ],\n },\n tenantResource: [\n {\n resourceItem: 'onlineReplicasLimit',\n resourceValue: '3',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'onlineReplicasLimit',\n resourceValue: '3',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiJavaLogicCompletionDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiJavaLogicCompletionDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'releaseDevAppCountLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'releaseDevAppCountLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'customPackageSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'customPackageSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiNl2sqlSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiNl2sqlSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiNextComponentSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiNextComponentSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'productAppSpecification',\n resourceValue: '1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'productAppSpecification',\n resourceValue: '1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configDatabaseSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configDatabaseSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiJavaLogicDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiJavaLogicDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'appPublishOnlineSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'appPublishOnlineSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'rdsMode',\n resourceValue: '0',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'rdsMode',\n resourceValue: '0',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'assetsLibraryExportSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'assetsLibraryExportSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'assignDeveloperSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'assignDeveloperSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'cpuLimit',\n resourceValue: '4',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'cpuLimit',\n resourceValue: '4',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configSourceCodeSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configSourceCodeSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'mavenConfigEditSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'mavenConfigEditSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiNl2LogicSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiNl2LogicSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiCodeAnalyzeSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiCodeAnalyzeSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'onboardingSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'onboardingSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'storageLimit',\n resourceValue: '8',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'storageLimit',\n resourceValue: '8',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'releaseAppCountLimit',\n resourceValue: '4',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'releaseAppCountLimit',\n resourceValue: '4',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configFrontSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configFrontSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configFileStorageSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configFileStorageSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'accountLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'accountLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'teamDeveloperSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'teamDeveloperSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiNl2sqlDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiNl2sqlDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'exportSourceSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'exportSourceSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiD2CSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiD2CSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'customDomainSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'customDomainSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'reportFormsEditSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'reportFormsEditSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'memoryLimit',\n resourceValue: '8',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'memoryLimit',\n resourceValue: '8',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiNl2LogicDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiNl2LogicDisplay',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiJavaLogicCompletionSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiJavaLogicCompletionSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'appCreateLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'appCreateLimit',\n resourceValue: '-1',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'assetsArchetypeSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'assetsArchetypeSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configSourceSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configSourceSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'configImageRepoSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'configImageRepoSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'assetsTemplateExportSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'assetsTemplateExportSupport',\n resourceValue: 'true',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n {\n resourceItem: 'aiJavaLogicSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: {\n resourceItem: 'aiJavaLogicSupport',\n resourceValue: 'false',\n validDateType: 1,\n startTime: '2024-02-02 12:44:02',\n endTime: '2024-02-02 12:44:02',\n versionResourceDetail: null,\n valueAddedResourceDetail: null,\n valid: true,\n },\n valueAddedResourceDetail: null,\n valid: true,\n },\n ],\n businessConfig: {\n upgradeClueCollect: {\n appId: '',\n support: false,\n },\n eventTracking: {\n appId: '',\n support: false,\n },\n beginnerGuide: {\n appId: '',\n support: false,\n },\n corpCertify: {\n appId: '',\n support: false,\n },\n rateLimiter: {\n appId: '',\n support: false,\n },\n businessAccess: {\n appId: '',\n support: false,\n },\n createSaaSTenant: {\n appId: '',\n support: false,\n },\n customApp: {\n appId: '',\n support: false,\n },\n research: {\n appId: '',\n support: false,\n },\n },\n expireTimeStr: null,\n layOutConfig: {},\n isPreviewFe: false,\n previewVersion: '',\n isExport: false,\n extendedConfig: null,\n appid: '7c058eff-e54c-4991-9e71-8b6357eb43b7',\n extensionConfigMap: {\n heuristicalSplit: {\n enabled: false,\n },\n },\n allNodesAPI: {},\n};\n\nconst logger = Logger('Playground');\n\nexport async function startDemoTranslation(container?: Container) {\n const app = await getApp();\n if (!app) {\n throw new Error('app 为空');\n }\n const frontend = app.frontendTypes.find((x) => x.kind === 'pc')?.frontends.at(0)!;\n if (!frontend) {\n throw new Error('frontend 为空');\n }\n // @ts-expect-error TODO wudengke config类型错误\n const project = await compileAsProject(app, frontend, config, container);\n const dict = project.getFileDict().files;\n logger.debug({ files: Object.keys(dict) }, '文件系统内容');\n const files = Object.entries(dict).map(([k, v]) => {\n return { path: k, content: v.code };\n });\n await writeCode(files);\n return files;\n async function getApp() {\n const res = await fetchApp();\n sanityCheck(res);\n return deserializeAppWhileKeepTypeAnnotation(res);\n }\n\n async function writeCode(codeList: { content: string | Buffer; path: string }[]) {\n const logger = Logger('代码写入');\n logger.info('开始写入debug用文件系统');\n for (const item of codeList) {\n logger.trace({ path: item.path }, `写入`);\n\n const outPath = path.join(__dirname, 'out', item.path); // @ts-ignore-error\n outputFileSync(outPath, Buffer.from(item.content));\n\n logger.trace({ path: item.path }, `写入完成`);\n }\n logger.info('全部写入完成');\n }\n}\n\nfunction fetchApp() {\n return useLocalFile();\n // function useLocalApi() {\n // return fetch('http://localhost:9300/api/storage/batchQuery', {\n // headers: {\n // accept: 'application/json, text/plain, */*',\n // 'accept-language': 'zh,en;q=0.9',\n // 'content-type': 'application/json;charset=UTF-8',\n // appid: '37adfe34-df3c-44b9-bf32-fafe64c213a6',\n // },\n // body: '[{\"path\":\"app\"}]',\n // method: 'POST',\n // })\n // .then((x) => x.json())\n // .then((x) => {\n // return x['result'][0];\n // });\n // }\n\n async function useLocalFile() {\n const json = readFileSync('./playground/fixtures/src.json').toString();\n return JSON.parse(json);\n }\n}\n","import { App, Frontend } from '@lcap/nasl-concepts';\nimport axios, { AxiosInstance } from 'axios';\nimport { Container } from 'inversify';\nimport { trimStart } from 'lodash';\nimport { makeDefaultContainer } from './default-container';\nimport { translateNASLToApp } from './translate-nasl-to-app';\nimport { OrganizedFile } from './plugins/misc/project-organization-plugin';\nimport { GeneratorInfrastructureDomain } from './service-interface';\nimport { ServiceMetaKind } from './service-metakind';\nimport { CommonAppConfig } from './types/config';\nimport { Logger } from './utils/logger';\nimport { getPublicPath, normalizeStaticUrl } from './utils/url';\nimport { serializeAppWithKeepTypeAnnotation } from './utils';\nimport { fetchFile } from './utils/fetchFile';\nimport { getPredefinedMaterialByTags } from './hack/material-config/predefined-dependencies-manager';\n\ntype ProjectFile = { code: string | Buffer };\n\nexport class VirtualProject {\n constructor(private fileDict: Record<string, ProjectFile>) {}\n mutateFile(path: string, content: Buffer | string, options = {}) {\n this.fileDict[path] = {\n ...options,\n code: content,\n };\n }\n getFileDict() {\n return { files: this.fileDict };\n }\n readFile(path: string) {\n return this.fileDict[path].code;\n }\n}\n\ntype FS = GeneratorInfrastructureDomain.FileSystemProvider;\n\nexport async function compileAsProject(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig,\n container?: Container\n): Promise<VirtualProject> {\n let codeGeneratorContainer = container ?? makeDefaultContainer(frontend.frameworkKind);\n const logger = Logger('compileAsProject');\n logger.info('开始翻译代码');\n\n // 制品日志功能\n // TODO wudengke 这个条件来自genBundleFiles,需要重构\n if ((!config?.isExport && config?.env === 'dev') || config?.debug) {\n logger.info('启用制品日志插件');\n // FIXME wudengke 暂时关闭制品日志功能\n // codeGeneratorContainer = installLoggingPlugin(codeGeneratorContainer);\n }\n\n logger.info('载入项目模板');\n\n const fs = codeGeneratorContainer.get<FS>(ServiceMetaKind.FileSystemProvider);\n\n const templatePackage = getPredefinedMaterialByTags([\n 'template',\n frontend.type,\n frontend.frameworkKind,\n ]);\n if (templatePackage) {\n const { STATIC_URL } = config;\n const url = `${normalizeStaticUrl(STATIC_URL)}/packages/${templatePackage?.name}@${\n templatePackage?.version\n }/sandbox-template.json`;\n try {\n const res = await fetchFile<{ files: Record<string, { code: string }> }>(url, axios, false);\n logger.info('远程加载模板成功');\n const files = res.files;\n Object.entries(files).forEach(([k, v]) => {\n fs.write(k, v.code);\n });\n } catch (error) {\n throw new Error(`远程加载模板失败`);\n }\n } else {\n throw new Error(`未找到匹配模板`);\n }\n\n await translateNASLToApp(app, frontend, config, '/', codeGeneratorContainer, fs);\n\n logger.info(Object.keys(fs.toJSON()), '生成的文件');\n\n /**\n * @deprecated\n *\n * TODO wudengke 去掉project\n */\n const project = new VirtualProject({});\n Object.entries(fs.toJSON()).forEach(([k, v]) => {\n if (v !== null) {\n project.mutateFile(k, v);\n }\n });\n return project;\n}\n\nexport async function compileNASLToReactDist(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig,\n http: AxiosInstance\n): Promise<OrganizedFile[]> {\n const logger = Logger('compileNASLToReactDist');\n // @ts-expect-error HACK: wudengke 因为export的时候没有STATIC_URL,所以这里需要手动先补上\n config = { ...config, STATIC_URL: config.STATIC_URL || globalThis?.appInfo?.STATIC_URL };\n\n const prefix = getPublicPath(app, config, frontend);\n logger.info('调用编译接口,输出静态文件');\n try {\n const files: { content: string; path: string }[] = await http\n .post('/api/v1/app/compileNaslToDist', {\n config,\n appId: app.id,\n frontendNodePath: frontend.nodePath,\n app: serializeAppWithKeepTypeAnnotation(app),\n })\n .then((x) => {\n const code = x?.data?.code;\n if (code !== 200) {\n const reason: string = x.data?.message ?? '原因未知';\n const logs: string = x.data?.errorPayload?.logs?.join('\\n') ?? '';\n logger.error('页面代码编译错误', x);\n if (logs) {\n console.error(logs);\n }\n if (reason) {\n throw new Error(`页面代码编译错误: ${reason}`);\n }\n throw new Error(`页面代码编译错误`);\n }\n return x.data.result.files;\n });\n const res = files.map((x) => {\n const path = prefix + trimStart(x.path, '/');\n return { ...x, path };\n });\n logger.info(\n '编译结果',\n res.map((x) => x.path)\n );\n return res;\n } catch (error) {\n throw error;\n }\n}\n","import { Container } from 'inversify';\nimport { Vue3PresetPlugin } from './plugins/vue/vue3/vue3-preset-plugin';\nimport { ReactPresetPlugin } from './plugins/react/react-preset-plugin';\n\nexport function makeDefaultContainer(kind: 'vue3' | 'react' | 'vue2' = 'react') {\n if (kind === 'react') {\n return ReactPresetPlugin.install(new Container());\n } else if (kind === 'vue3') {\n return Vue3PresetPlugin.install(new Container());\n } else {\n throw new Error(`未实现${kind}的默认容器`);\n }\n}\n","import '@abraham/reflection';\nimport { Container, inject, injectable } from 'inversify';\n\nimport { App, Frontend } from '@lcap/nasl-concepts';\nimport {\n type Generator,\n type GeneratorInfrastructureDomain,\n type NASLDomain,\n} from '../../../service-interface';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { CommonAppConfig } from '../../../types/config';\nimport { Logger } from '../../../utils/logger';\nimport {\n deserializeAppWhileKeepTypeAnnotation,\n serializeAppWithKeepTypeAnnotation,\n} from '../../../utils/serialization';\nimport { ViewComponentIR } from '../../../types';\nimport { NASLAppIRBuilderPlugin } from '../../ir-builder-plugin';\nimport { JavaScriptCodegenPlugin } from '../../language/javascript-codegen-plugin';\nimport { EntrypointPlugin } from '../../misc/entry-point/entry-point-plugin';\nimport { FileSystemPlugin } from '../../misc/file-system/file-system-plugin';\nimport { BundlerConfigDataPlugin } from '../../misc/bundler/bundler-config-data-plugin';\nimport { RspackConfigPlugin } from '../../misc/bundler/rspack-config-plugin';\nimport { FrontendBundlerConfigPlugin } from '../../misc/frontend-bundler-config-plugin';\nimport { FrontendPerformancePlugin } from '../../misc/frontend-performance-plugin';\nimport { MicroFrontendPlugin } from '../../misc/micro-frontend/micro-frontend-plugin';\nimport { NpmPackageJSONManagerPlugin } from '../../misc/npm-package-manager-plugin';\nimport { OrganizedFile, ProjectOrganizerPlugin } from '../../misc/project-organization-plugin';\nimport { Vue3ApplicationAssemblerPlugin } from './vue3-application-assembler-plugin';\nimport { Vue3CodegenPlugin } from './vue3-codegen-plugin';\nimport { Vue3EntryBuilderPlugin } from './vue3-entry-builder-plugin';\nimport { Vue3LibrariesBuilderPlugin } from './vue3-libraries-builder-plugin';\nimport { Vue3EntryCssPlugin } from './vue3-entry-css-plugin';\nimport { Vue3MetaDataBuilderPlugin } from './vue3-meta-data-builder-plugin';\nimport { Vue3ComponentsIndexBuilderPlugin } from './vue3-components-index-builder-plugin';\nimport { Vue3ClientLazyloadTemplateBuilderPlugin } from './vue3-client-lazyload-template-builder-plugin ';\nimport { Vue3PlatformBuilderPlugin } from './vue3-platform-builder-plugin';\nimport { RoutesExtractionPlugin } from '../../misc/routes-extraction-plugin';\nimport { VueRouterPlugin } from '../common/vue-router-plugin';\n\nconst logger = Logger('Vue3PresetPlugin');\n\n@injectable()\nexport class Vue3PresetPlugin implements Generator.NASLTranspiler {\n constructor(\n @inject(ServiceMetaKind.IRBuilder) private irBuilder: NASLDomain.IRBuilder,\n @inject(ServiceMetaKind.FileSystemProvider)\n private fileSystemProvider: GeneratorInfrastructureDomain.FileSystemProvider,\n @inject(NpmPackageJSONManagerPlugin)\n private npmPackageJSONManager: NpmPackageJSONManagerPlugin,\n @inject(ServiceMetaKind.ProjectOrganizer)\n private projectOrganizer: GeneratorInfrastructureDomain.ProjectOrganizer,\n @inject(Vue3ApplicationAssemblerPlugin)\n private applicationAssembler: Vue3ApplicationAssemblerPlugin\n ) {}\n\n async transpile(instruction: {\n app: App;\n frontend: Frontend;\n config: CommonAppConfig;\n baseDir: string;\n }): Promise<OrganizedFile[]> {\n const appJson = serializeAppWithKeepTypeAnnotation(instruction.app);\n try {\n const app = deserializeAppWhileKeepTypeAnnotation(appJson);\n const frontend = app.findNodeByPath(instruction.frontend.nodePath) as Frontend;\n const ir = this.irBuilder.buildIR(app, frontend, instruction.config);\n\n // Vue3增量发布, 修改ir.views,清空bizComponents\n const needCompileViews = instruction.config?.needCompileViews ?? [];\n const isIncremental = needCompileViews.length > 0;\n\n if (isIncremental) {\n const filterChildComponents = (view: ViewComponentIR, needCompileViews: string[]) => {\n if (!view.childComponents?.length) {\n return;\n }\n\n view.childComponents = view.childComponents.filter((child) => {\n if (needCompileViews.includes(child.__raw.nodePath)) {\n filterChildComponents(child, needCompileViews);\n return true;\n }\n\n return false;\n });\n }\n\n ir.views = ir.views.filter((view) => {\n if (needCompileViews.includes(view.__raw.nodePath)) {\n filterChildComponents(view, needCompileViews);\n return true;\n }\n\n return false;\n });\n\n ir.bizComponents = [];\n }\n\n const assembledApplication = await this.applicationAssembler.assemble(ir, instruction.config);\n // TODO 覆写 moveFilesAsYouWant 方法,调用Vue3专用的方法来移动\n const finalizedFiles = await this.projectOrganizer.organize({\n baseDir: instruction.baseDir,\n project: assembledApplication,\n importIRResolver: (s) => {\n if (s.import) {\n if (s.lazy) {\n return `const ${s.import} = (() => import('${s.from}'));`;\n }\n return `import ${s.import} from '${s.from}';`;\n }\n return `import '${s.from}';`;\n },\n });\n\n for (const f of finalizedFiles) {\n this.fileSystemProvider.write(f.path, f.content);\n }\n return finalizedFiles;\n } catch (error) {\n throw error;\n }\n }\n static install(container: Container) {\n const logger = Logger('Vue3PresetPlugin');\n logger.info('安装Vue3PresetPlugin');\n let c = container.createChild();\n // main entry\n c.bind(ServiceMetaKind.NASLTranspiler).to(Vue3PresetPlugin);\n\n // basic\n c.bind(ServiceMetaKind.IRBuilder).to(NASLAppIRBuilderPlugin);\n\n // js\n c.bind(JavaScriptCodegenPlugin).toSelf();\n\n // vue3\n c = Vue3ApplicationAssemblerPlugin.install(c);\n c = Vue3CodegenPlugin.install(c);\n\n // router\n c = RoutesExtractionPlugin.install(c);\n c = VueRouterPlugin.install(c);\n\n // misc\n c.bind(ServiceMetaKind.ProjectOrganizer).to(ProjectOrganizerPlugin);\n c.bind(ServiceMetaKind.FileSystemProvider).to(FileSystemPlugin).inSingletonScope();\n\n c = BundlerConfigDataPlugin.install(c);\n c = RspackConfigPlugin.install(c);\n c = FrontendBundlerConfigPlugin.install(c);\n c = FrontendPerformancePlugin.install(c);\n c = NpmPackageJSONManagerPlugin.install(c);\n c = MicroFrontendPlugin.install(c);\n c = EntrypointPlugin.install(c);\n c = Vue3EntryBuilderPlugin.install(c);\n c = Vue3LibrariesBuilderPlugin.install(c);\n c = Vue3EntryCssPlugin.install(c);\n c = Vue3MetaDataBuilderPlugin.install(c);\n c = Vue3ComponentsIndexBuilderPlugin.install(c);\n c = Vue3ClientLazyloadTemplateBuilderPlugin.install(c);\n c = Vue3PlatformBuilderPlugin.install(c);\n return c;\n }\n}\n","const ServiceMetaKind = {\n /**\n * @deprecated\n */\n StateManager: Symbol.for('StateManager'),\n ReactStateManager: Symbol.for('ReactStateManager'),\n ReactHookProvider: Symbol.for('ReactHookProvider'),\n CodePrinter: Symbol.for('CodePrinter'),\n ReactJavaScriptCodePrinter: Symbol.for('ReactJavaScriptCodePrinter'),\n BaseNodePrinter: Symbol.for('BaseNodePrinter'),\n ProjectOrganizer: Symbol.for('ProjectOrganizer'),\n MicroFrontendManager: Symbol.for('MicroFrontendManager'),\n FrontendCodeGenerator: Symbol.for('FrontendCodeGenerator'),\n IRBuilder: Symbol.for('IRBuilder'),\n IRPostProcesser: Symbol.for('IRPostProcesser'),\n IRPreProcesser: Symbol.for('IRPreProcesser'),\n NASLTranspiler: Symbol.for('NASLTranspiler'),\n ReactCodegen: Symbol.for('ReactCodegen'),\n CodeGenerationLifecycleHooks: Symbol.for('CodeGenerationLifecycleHooks'),\n FileSystemProvider: Symbol.for('FileSystemProvider'),\n FrontendBundlerFileConfig: Symbol.for('FrontendBundlerFileConfig'),\n FrontendBundlerConfig: Symbol.for('FrontendBundlerConfig'),\n FrontendPerformance: Symbol.for('FrontendPerformance'),\n NpmPackageJSONManager: Symbol.for('NpmPackageJSONManager'),\n EntryPointManager: Symbol.for('EntryPointManager'),\n AnalyzerManager: Symbol.for('AnalyzerManager'),\n NameManglerManager: Symbol.for('NameManglerManager'),\n};\n\nconst hasAfterAllFilesGeneratedKind = [\n ServiceMetaKind.CodeGenerationLifecycleHooks,\n ServiceMetaKind.NpmPackageJSONManager,\n];\n\nexport { ServiceMetaKind, hasAfterAllFilesGeneratedKind };\n","import { isFunction } from 'lodash';\nimport pino from 'pino';\n\nconst DefaultLoggingLevel = process.env.LOG_LEVEL || 'info';\n\nconst globalLogger = pino({\n level: DefaultLoggingLevel,\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: true,\n },\n },\n});\n\nconst showCallStack = process.env.NODE_ENV === 'CALLSTACK';\n\nexport function Logger(prefix: string) {\n // let l = showCallStack ? pinoCaller(globalLogger) : globalLogger;\n let l = globalLogger;\n const logger = l.child({}, { msgPrefix: `[${prefix}] ` });\n return logger;\n}\n\nexport function logging(target: any) {\n if (!isFunction(target)) {\n throw new Error();\n return target;\n }\n const className = target.name;\n const methodNames = Object.getOwnPropertyNames(target.prototype);\n const logger = Logger(className);\n methodNames.forEach((methodName) => {\n const originalMethod = target.prototype[methodName];\n target.prototype[methodName] = function (...args: any[]) {\n logger.trace({ method: methodName, args });\n return originalMethod.apply(this, args);\n };\n });\n\n return target;\n}\n","import { App, BaseNode, TypeAnnotation } from '@lcap/nasl-concepts';\nimport { cloneDeep } from 'lodash';\n\nexport function deserializeAppWhileKeepTypeAnnotation(appJSON: object): App {\n const oldSub = BaseNode.prototype.subConstructor;\n const hack: typeof oldSub = function (source) {\n // @ts-expect-error\n oldSub.call(this, source);\n // @ts-expect-error\n if (source.typeAnnotation) {\n // @ts-expect-error\n this.typeAnnotation = new TypeAnnotation(source.typeAnnotation);\n }\n // @ts-expect-error\n if (source.__TypeArguments) {\n // @ts-expect-error\n this.__TypeArguments = source.__TypeArguments.map((x) => {\n if (x) {\n return new TypeAnnotation(x);\n }\n return x;\n });\n }\n };\n BaseNode.prototype.subConstructor = hack;\n const app = new App(appJSON);\n if ('_callLogicUuidToHeaderMap' in appJSON) {\n const m = appJSON._callLogicUuidToHeaderMap as Record<string, string>;\n app.saveCallLogicUuidToHeaderMap(m);\n }\n BaseNode.prototype.subConstructor = oldSub;\n return app;\n}\n\nexport function serializeAppWithKeepTypeAnnotation(app: App) {\n // @ts-expect-error\n const baseNodeProto = app.__proto__.__proto__;\n const oldToJSON = baseNodeProto._toJSON;\n // @ts-expect-error\n const newToJSON = function (filerFn): any {\n // @ts-expect-error\n const json = oldToJSON.call(this, filerFn);\n // @ts-expect-error\n if (this.typeAnnotation || this.__TypeAnnotation) {\n // @ts-expect-error\n json.typeAnnotation = this.typeAnnotation?.toJSON() ?? this.__TypeAnnotation?.toJSON();\n }\n // @ts-expect-error\n if (this.__TypeArguments) {\n // @ts-expect-error\n json.__TypeArguments = this.__TypeArguments.map?.((x) => {\n if (x) {\n return x.toJSON();\n }\n return x;\n });\n }\n return json;\n };\n\n baseNodeProto._toJSON = newToJSON;\n try {\n const json = app.toJSON();\n json._callLogicUuidToHeaderMap = cloneDeep(app._callLogicUuidToHeaderMap);\n return json;\n } catch (error) {\n throw error;\n } finally {\n baseNodeProto._toJSON = oldToJSON;\n }\n}\n","import '@abraham/reflection';\nimport {\n App,\n Argument,\n Assignment,\n BinaryExpression,\n BindAttribute,\n BindDirective,\n BindEvent,\n CallFunction,\n Connector,\n Frontend,\n FrontendVariable,\n Identifier,\n Logic,\n MemberExpression,\n Module,\n Param,\n StringLiteral,\n View,\n ViewElement,\n BusinessComponent,\n CallLogic,\n genHash,\n Unparsed,\n Return,\n ValidationRule,\n getConfig,\n initialize,\n} from '@lcap/nasl-concepts';\nimport {\n isBooleanLiteral,\n isCallLogic,\n isConnector,\n isFrontend,\n isIdentifier,\n isMemberExpression,\n isNullLiteral,\n isNumericLiteral,\n isStringLiteral,\n isView,\n isViewElement,\n} from '@lcap/nasl-concepts/asserts';\nimport * as breakpoint from '@lcap/nasl-breakpoint';\nimport { genMetaData } from '../generator';\nimport { injectable, optional, multiInject } from 'inversify';\nimport { capitalize, isObject, pick } from 'lodash';\nimport { type NASLDomain } from '../service-interface';\nimport { CommonAppConfig } from '../types/config';\nimport {\n BindAttributeIR,\n BindDirectiveIR,\n BindEventIR,\n GeneralComponentIR,\n ComponentInstanceIR,\n Expr,\n ExprIR,\n LogicIR,\n NASLAppIR,\n Package,\n ParamIR,\n ReferencedComponent,\n ViewComponentIR,\n BizComponentIR,\n} from '../types/ir';\nimport { StateActionIR, StateIR, TreeStateIR } from '../types/state';\nimport { assertNever, notImplemented } from '../utils/assert';\nimport {\n ElementRefName,\n componentNameToRefName,\n extractComponentNameFromElementRefName,\n isNameAElementRef,\n} from '../utils/component';\nimport { Logger } from '../utils/logger';\nimport { prepareVariableDefaultValue } from '../utils/nasl';\nimport { startsWithUpperCase, trueKebab2Camel, kebab2Pascal } from '../utils/str';\nimport { isNotNil } from '../utils/types';\nimport {\n IdentifierNameResolver,\n IdentifierResolver,\n javaScriptCodeGenCallBackBag,\n} from './language/javascript-codegen-plugin';\nimport { metadataPlugin } from './misc/metadata-plugin';\nimport { ServiceMetaKind } from '../service-metakind';\nimport {\n getPredefinedMaterialByTags,\n getPredefinedMaterialConfig,\n} from '../hack/material-config/predefined-dependencies-manager';\n\nexport interface StateManager {\n resolveIdentifier: IdentifierResolver;\n resolveCalleeNamespace: IdentifierNameResolver;\n}\n\nexport interface SyntaxNodePrinter<SyntaxNode> {\n printSyntaxNode: (syntaxNode: SyntaxNode, callbackBag?: javaScriptCodeGenCallBackBag) => string;\n}\n\nexport class StateContextIR {\n constructor(\n public providedStates: StateIR[],\n public consumedStateNames: string[],\n public actions: StateActionIR[],\n private parentCtx: StateContextIR | null\n ) {}\n recursivelyExtractTreeStates(): TreeStateIR[] {\n return [\n ...this.providedStates.filter((x): x is TreeStateIR => x.kind === 'tree'),\n ...(this.parentCtx?.recursivelyExtractTreeStates() ?? []),\n ];\n }\n resolveExprToString<SyntaxNode>(\n syntaxNode: SyntaxNode,\n printer: SyntaxNodePrinter<SyntaxNode>,\n manager: StateManager\n ): string {\n return printer.printSyntaxNode(syntaxNode, {\n resolve({ kind, value }) {\n switch (kind) {\n case 'calleeNamespace':\n return manager.resolveCalleeNamespace(value);\n case 'identifier':\n return manager.resolveIdentifier(value);\n }\n },\n });\n }\n /**\n * 将一个状态上下文作为父上下文,构造空上下文\n * @param parentCtx\n * @returns\n */\n static fromParent(parentCtx: StateContextIR | null) {\n return this.create().setParent(parentCtx);\n }\n setParent(parentCtx: StateContextIR | null) {\n this.parentCtx = parentCtx;\n return this;\n }\n static create() {\n return new StateContextIR([], [], [], null);\n }\n provide(state: StateIR): this {\n this.providedStates.push(state);\n return this;\n }\n provideAction(action: StateActionIR): this {\n this.actions.push(action);\n return this;\n }\n findStateByName(name: string): StateIR | undefined {\n return (\n this.providedStates.find((x) => x.identifier === name) ??\n this.parentCtx?.findStateByName(name)\n );\n }\n findActionByName(name: string): StateActionIR | undefined {\n return this.actions.find((x) => x.name === name) ?? this.parentCtx?.findActionByName(name);\n }\n findComponentRefByComponentName(name: string): StateIR | undefined {\n return (\n this.findStateByName(componentNameToRefName(name)) ??\n this.parentCtx?.findComponentRefByComponentName(name)\n );\n }\n}\n\ntype DeepReadonly<T> = {\n readonly [P in keyof T]: DeepReadonly<T[P]>;\n};\n\nexport type FinalizedStateContextIR = DeepReadonly<StateContextIR>;\n\n/**\n * 收集顶层 View 组件\n */\nfunction collectTopLevelViews(app: App, frontend: Frontend): View[] {\n // 迁移自老代码\n const modules: (Module | Connector)[] = [];\n const views: View[] = [];\n app.dependencies && modules.push(...app.dependencies);\n app.interfaceDependencies && modules.push(...app.interfaceDependencies);\n frontend.views && views.push(...frontend.views);\n modules.forEach((module: Module) => {\n module.views && views.push(...module.views);\n });\n return views;\n}\n\nexport function paramToIR(param: Param): ParamIR {\n return {\n name: param.name,\n typeAnnotation: param.__TypeAnnotation,\n defaultValue: param.defaultValue,\n };\n}\n\nfunction bindDirectiveToIR(b: BindDirective): BindDirectiveIR | undefined {\n if (isIfDirective(b) || isAuthDirective(b)) {\n // 处理authDirective\n if (isAuthDirective(b)) {\n // 将auth指令归约到if指令上\n // expr是一个资源路径,形如\"/test/Switch_1\",其中`Switch_1`是组件的名字,`/test`是页面路径\n // $auth.has(${expr})\n const wrappedExpr = CallFunction.from(\n {\n calleeNamespace: 'nasl.auth',\n calleeName: 'has',\n arguments: [\n Argument.from({ expression: new StringLiteral({ value: b.viewElement.authPath }) }),\n ],\n },\n b.parentNode,\n b.parentKey\n );\n return {\n __raw: b,\n concept: b.concept,\n expression: exprToIR(wrappedExpr),\n kind: 'if',\n };\n } else {\n // 处理普通Directive\n const expr = b.expression;\n if (expr) {\n return {\n __raw: b,\n concept: b.concept,\n expression: exprToIR(expr),\n kind: 'if',\n };\n }\n logger.debug({ nodePath: b.nodePath }, '无expression的directive,可能为脏数据');\n }\n return undefined;\n } else {\n logger.error({ nodePath: b.nodePath }, `遇到了不支持的 directive: ${b.name}`);\n return notImplemented(b);\n }\n\n function isIfDirective(b: BindDirective) {\n return b.name === 'if';\n }\n\n function isAuthDirective(b: BindDirective) {\n return b.name === 'auth';\n }\n}\n\nfunction exprToIR(expr: Expr): ExprIR {\n return {\n expr,\n deps: [],\n };\n}\n\nexport function bindAttrToIR(\n b:\n | BindAttribute\n | (Omit<BindAttribute, 'type' | 'name' | 'rules'> & {\n type: null | undefined;\n name: 'rules';\n rules: ValidationRule[];\n })\n | {\n type: 'component';\n component: ComponentInstanceIR;\n scopeVariable: string | undefined;\n name: string;\n }\n): BindAttributeIR | undefined {\n if (b.type == null && b.name === 'rules') {\n const rules = b.rules;\n return {\n kind: 'validation-rules',\n concept: 'BindAttribute',\n name: 'rules',\n rules: rules ?? [],\n __raw: b as unknown as BindAttribute,\n };\n }\n\n if (!b.type) {\n logger.trace(`bindAttrToIR检查到脏数据, 跳过此属性`);\n logger.trace({ nodePath: b.nodePath, _type: String(b.type) });\n return undefined;\n }\n\n switch (b.type) {\n case 'string': {\n const expr = StringLiteral.from({ value: b.value });\n if (b.sync) {\n logger.error({ nodePath: b.nodePath }, 'string不可为sync');\n throw new Error('string不可为sync');\n }\n // todo: 后续整理到 i18n 插件中统一处理\n if (b.i18nKey && b.value && b.frontend?.i18nInfo?.enabled) {\n const frameworkKind = b.frontend?.frameworkKind;\n // TODO(tangjianghong) 不建议修改原始nasl数据\n if(!['vue3'].includes(frameworkKind)) {\n b.type = 'dynamic';\n }\n const wrapperExpr = CallFunction.from(\n {\n calleeNamespace: '$i18n',\n calleeName: 't',\n arguments: [Argument.from({ expression: StringLiteral.from({ value: b.i18nKey }) })],\n },\n b.parentNode,\n b.parentKey\n );\n return {\n __raw: b,\n concept: b.concept,\n kind: 'expr',\n expression: exprToIR(wrapperExpr),\n name: b.name,\n sync: false,\n };\n }\n return {\n __raw: b,\n concept: b.concept,\n kind: 'expr',\n expression: exprToIR(expr),\n name: b.name,\n sync: false,\n };\n }\n case 'static':\n case 'dynamic': {\n if (b.type === 'dynamic') {\n // 将destination/externalDestination标准化为expression\n if (b.destination) {\n b.expression = b.destination;\n } else if (b.externalDestination) {\n b.expression = b.externalDestination;\n b.name = 'link';\n }\n }\n return {\n __raw: b,\n concept: b.concept,\n kind: 'expr',\n // @ts-expect-error\n // FIXME wudengke static 需要从b.value上读表达式。目前暂时在react-codegen里面处理\n expression: exprToIR(b.expression),\n name: b.name,\n sync: b.sync ?? false,\n };\n }\n case 'component': {\n return {\n kind: 'render',\n concept: 'BindAttribute',\n component: b.component,\n scopeVariable: b.scopeVariable,\n name: b.name,\n };\n }\n default: {\n // @ts-expect-error FIXME wudengke\n assertNever(b);\n }\n }\n}\n\nexport function logicToLogicIR(logic: Logic): LogicIR {\n return {\n logic,\n deps: [],\n };\n}\n\n// TODO wudengke move\nfunction getHandlerName(eventName: string, elementName?: string) {\n function isView(elementName: string): boolean {\n return ['pc', 'h5'].includes(elementName);\n }\n if (elementName && isView(elementName)) {\n return eventName;\n }\n return trueKebab2Camel(`${elementName ?? ''}-${eventName}`);\n}\n\nexport function inferChangeEventNameFromAttrName(attrName: string) {\n const valueMaps2ChangeEvent: Record<string, string | undefined> = {\n value: 'change',\n checked: 'change',\n };\n return valueMaps2ChangeEvent[attrName] ?? `${attrName}-change`;\n}\n\nexport function bindViewElementEventToIR(b: BindEvent): BindEventIR {\n return {\n __raw: b,\n logics: b.logics.map(logicToLogicIR),\n concept: b.concept,\n params: b.getContextLogicParams().map(paramToIR),\n handlerName: getHandlerName(b.name, b.parentNode.name),\n };\n}\n\nexport function bindEventToAction(b: BindEventIR): StateActionIR {\n return {\n __raw: b.__raw,\n logics: b.logics,\n deps: [],\n name: b.handlerName,\n params: b.params,\n kind: 'standalone',\n };\n}\n\nconst DefaultComponentLibraryName = getPredefinedMaterialByTags(['ui', 'pc', 'react'])?.name as string;\n\nfunction getReferencedLibComponent(e: ViewElement): ReferencedComponent {\n const tag = e.tag;\n if (tag.startsWith('BS')) {\n return {\n kind: 'biz-component',\n tag,\n libraryName: `@/components/${kebab2Pascal(tag.slice(2))}`,\n };\n } else if (startsWithUpperCase(tag)) {\n // FIXME wudengke 查一下usage列表,判断是否在extension中,不然会始终从标准组件库中引入\n const foundExtension = e?.app?.dependencies?.find((dep) => {\n return dep.frontends.some((x) => {\n return x.viewComponents.some((x) => x.name === tag);\n });\n });\n // HACK 组件库不太行\n if (tag === 'Router') {\n return { kind: 'library', libraryName: 'react-router-dom', tag: 'Outlet' };\n }\n const libraryName = foundExtension\n ? `@extension/${foundExtension.name}`\n : DefaultComponentLibraryName;\n return { kind: 'library', libraryName, tag };\n } else if (tag) {\n // TODO wudengke 最好查一下依赖库组件列表\n return { kind: 'library', libraryName: DefaultComponentLibraryName, tag };\n }\n throw new Error('empty tag name!');\n}\n\nfunction hackDataSource(c: ComponentInstanceIR, ctx: StateContextIR) {\n const attrs: (BindAttributeIR | undefined)[] = c.attrs;\n for (let i = 0; i < attrs.length; i++) {\n const b = attrs[i];\n if (!b) {\n continue;\n }\n if (b.kind === 'expr' && b.name === 'dataSource' && b.expression.expr) {\n // case1: 对这类简单表达式直接inline\n if (\n isIdentifier(b.expression.expr) ||\n isMemberExpression(b.expression.expr) ||\n isNumericLiteral(b.expression.expr) ||\n isStringLiteral(b.expression.expr) ||\n isBooleanLiteral(b.expression.expr) ||\n isNullLiteral(b.expression.expr)\n ) {\n // FIXME wudengke toJS 抽象泄露\n const newExpr = CallFunction.from(\n { calleeName: 'toJS', arguments: [new Argument({ expression: b.expression.expr })] },\n b.__raw.parentNode,\n b.__raw.parentKey\n );\n const newIr: BindAttributeIR = {\n ...b,\n expression: { expr: newExpr },\n };\n attrs[i] = newIr;\n continue;\n }\n // case2: 对表达式比较复杂的情形,生成一个dataSourceLoad方法,将dataSource的逻辑放入其中\n\n // FIXME wudengke 正经的 name mangling!\n // 不会对同一个属性有两个nodePath相同的bindAttrbute。因此。因此这个hash是唯一的。\n // TODO wudengke 抽成一个函数\n const suffix = capitalize(genHash(b.__raw.nodePath));\n const prefix = `dataSource${suffix}`;\n const names = {\n queryParam: `event`,\n tempResultVariable: `${prefix}LoadResult`,\n dataFetchMethod: `${prefix}Load`,\n };\n const currentElement = c.__raw;\n const componentRefName = ctx.findComponentRefByComponentName(\n currentElement?.name ?? ''\n )?.identifier;\n // HACK: dataSource中使用到的current, pageSize, sorter, order等属性,需要从queryParam上取\n if (componentRefName) {\n b.expression.expr.traverseStrictChildren((node) => {\n if (isMemberExpression(node)) {\n if (isIdentifier(node.object) && isIdentifier(node.property)) {\n if (\n node.object.name === componentRefName &&\n ['current', 'pageSize', 'sorter', 'order'].includes(node.property.name)\n ) {\n node.object = new Identifier({ name: names.queryParam });\n node.property = new Identifier({ name: node.property.name });\n }\n }\n }\n });\n }\n\n // 其余情形,需要生成一个新的bindEvent,按照bindEvent来处理\n const dataFetchLogic = Logic.from(\n {\n body: [\n new Assignment({\n left: new Identifier({ name: names.tempResultVariable }),\n right: b.expression.expr,\n }),\n new Unparsed({ code: `return ${names.tempResultVariable}` }),\n ],\n params: [new Param({ name: names.queryParam })],\n returns: [\n new Return({\n name: names.tempResultVariable,\n }),\n ],\n },\n b.__raw.parentNode,\n undefined\n );\n const newBindEvent = BindEvent.from(\n {\n name: 'dataSource',\n params: dataFetchLogic.params,\n logics: [dataFetchLogic],\n },\n b.__raw.parentNode,\n 'bindEvents'\n );\n function bindManualBindEventToIR(b: BindEvent): BindEventIR {\n return {\n __raw: b,\n logics: b.logics.map(logicToLogicIR),\n concept: b.concept,\n params: b.getContextLogicParams().map(paramToIR),\n handlerName: names.dataFetchMethod,\n };\n }\n const ir: BindEventIR = bindManualBindEventToIR(newBindEvent);\n // 让当前绑定属性失效,并加一个dataSource的绑定事件\n c.events.push(ir);\n attrs[i] = undefined;\n } else if (b.kind === 'expr' && b.name === 'value' && b.expression.expr) {\n // 对其他的情形,有必要在绑定外面套一层toJS\n // HACK: 暂时只处理value,其他不处理\n if (isIdentifier(b.expression.expr) || isMemberExpression(b.expression.expr)) {\n // FIXME wudengke toJS 抽象泄露,应当放到toMobx中\n const newExpr = CallFunction.from(\n { calleeName: 'toJS', arguments: [new Argument({ expression: b.expression.expr })] },\n b.__raw.parentNode,\n b.__raw.parentKey\n );\n const newIr: BindAttributeIR = {\n ...b,\n expression: { expr: newExpr },\n };\n attrs[i] = newIr;\n continue;\n }\n }\n }\n c.attrs = attrs.filter(isNotNil);\n}\n\nfunction prependBindEventForSyncBindAttribute(c: ComponentInstanceIR) {\n const syncBindAttrs = c.attrs.flatMap((x) => {\n if (x.kind === 'expr' && x.sync) {\n if (x.expression.expr) {\n return [x];\n } else {\n logger.debug(`${x.__raw.nodePath}的expression为空,但仍为双向绑定。已忽略。`);\n }\n }\n return [];\n });\n syncBindAttrs.forEach((x) => {\n logger.debug({ x }, '构造双向绑定的handler');\n const bindEvent = findOrCreateBindEvent();\n // 约定:双向绑定只会将第一个参数赋值给绑定的变量\n const eventParamIR = bindEvent.params.at(0);\n const eventParam = new Param({ name: eventParamIR?.name ?? 'event' });\n // 新建一个Change Handler,负责将event更新到绑定的变量上\n const logic = Logic.from({\n // TODO wudengke 需要找一个不冲突的名字\n name: '_syncChange',\n body: [\n Assignment.from(\n { left: x.expression.expr, right: eventParam },\n x.__raw.parentNode,\n x.__raw.parentKey\n ),\n ],\n params: [eventParam],\n });\n bindEvent.logics.unshift(logicToLogicIR(logic));\n if (!eventParamIR) {\n bindEvent.params.push(paramToIR(eventParam));\n }\n function findOrCreateBindEvent(): BindEventIR {\n const changeEventName = inferChangeEventNameFromAttrName(x.name);\n const eventHandlerName = getHandlerName(changeEventName, x.__raw.parentNode?.name);\n logger.trace({ targetEventName: changeEventName, targetHandlerName: eventHandlerName });\n const found = c.events.find((e) => e.handlerName === eventHandlerName);\n if (found) {\n return found;\n }\n const created = bindViewElementEventToIR(\n BindEvent.from({ logics: [], name: changeEventName }, x.__raw.parentNode, 'bindEvents')\n )!;\n c.events.push(created);\n return created;\n }\n });\n}\n\n/**\n * 将有多个logics的bindEvent拆分成mainAction和被mainAction调用的其他subActions\n * @param originalAction\n * @returns\n */\nfunction splitLogicsInActionToMultipleActions(originalAction: StateActionIR): StateActionIR[] {\n if (originalAction.logics.length > 1) {\n const actions = [];\n const params = originalAction.params.map((x) => Param.from(x));\n // TODO wudengke 观察一下这里是否有问题\n const logics = originalAction.logics.map((l): LogicIR => {\n const name = `${originalAction.name}_${l.logic.name}`;\n const logic = Logic.from({ ...l.logic, params, name }, l.logic.parentNode, l.logic.parentKey);\n logic.body = l.logic.body;\n return logicToLogicIR(logic);\n });\n const mainAction = new StateActionIR({\n ...originalAction,\n logics,\n });\n actions.push(mainAction);\n logics.forEach((l) => {\n const subAction = new StateActionIR({\n ...originalAction,\n name: l.logic.name,\n logics: [l],\n // 需要指定subAction为standalone,用于被mainAction调用\n kind: 'standalone',\n });\n actions.push(subAction);\n });\n return actions;\n } else {\n return [originalAction];\n }\n}\n\n/**\n * 使用 && 合并多个if指令\n */\nfunction mergeMultipleIfDirectivesIntoConjunctiveNormalForm(\n directives: BindDirectiveIR[]\n): BindDirectiveIR[] {\n // 断言所有bindDirectives都是if指令\n if (directives.some((x) => x.kind !== 'if')) {\n logger.error('mergeIfDirectives接收到了不是if指令的bindDirectives');\n throw new Error('mergeIfDirectives接收到了不是if指令的bindDirectives');\n }\n const [baseDirective, ...restDirectives] = directives;\n if (!baseDirective) {\n return directives;\n }\n let mergedExpr = baseDirective.expression.expr;\n for (const cur of restDirectives) {\n mergedExpr = BinaryExpression.from(\n { left: mergedExpr, operator: '&&', right: cur.expression.expr },\n cur.__raw.parentNode,\n cur.__raw.parentKey\n );\n }\n const mergedIfDirective: BindDirectiveIR = {\n kind: 'if',\n concept: 'BindDirective',\n expression: exprToIR(mergedExpr),\n __raw: baseDirective.__raw,\n };\n return [mergedIfDirective];\n}\n\nfunction extractAsComponentInstanceIR(ctx: StateContextIR, e: ViewElement): ComponentInstanceIR {\n const attrs = e.bindAttrs.map(bindAttrToIR).filter(isNotNil);\n const directives = mergeMultipleIfDirectivesIntoConjunctiveNormalForm(\n e.bindDirectives.map(bindDirectiveToIR).filter(isNotNil)\n );\n const c: ComponentInstanceIR = {\n name: e.name,\n directives,\n attrs,\n events: e.bindEvents.map(bindViewElementEventToIR).filter(isNotNil),\n children: e.children.map((x: ViewElement) => {\n return extractAsComponentInstanceIR(ctx, x);\n }),\n component: getReferencedLibComponent(e),\n __raw: e,\n kind: 'component-instance',\n slot: { scope: e.slotScope || undefined, target: normalizeSlotTarget(e.slotTarget) },\n };\n\n prependBindEventForSyncBindAttribute(c);\n hackDataSource(c, ctx);\n c.events.forEach((bind) => {\n const actions = splitLogicsInActionToMultipleActions(bindEventToAction(bind));\n for (const action of actions) {\n ctx.provideAction(action);\n }\n });\n return c;\n function normalizeSlotTarget(targetName: string | undefined): string | undefined {\n if (targetName === 'default' || targetName === '') {\n return undefined;\n }\n return targetName;\n }\n}\n\nfunction collectStatesAndActionsFromView(bcOrView: View | BusinessComponent): {\n consumedStateNames: string[];\n providedStates: StateIR[];\n actions: StateActionIR[];\n} {\n const providedStates: StateIR[] = [];\n const actions: StateActionIR[] = [];\n /**\n * 局部变量声明\n */\n bcOrView.variables.forEach((variable) => {\n const state: StateIR = {\n kind: 'local-logic',\n initialization: {\n kind: 'static',\n value: exprToIR(prepareVariableDefaultValue(variable)),\n },\n identifier: variable.name,\n typeAnnotation: variable.__TypeAnnotation,\n };\n providedStates.push(state);\n });\n /**\n * 页面生命周期handler\n */\n bcOrView.bindEvents.forEach((b) => {\n const isFrontendEvent = isFrontend(b.parentNode);\n const action = new StateActionIR({\n __raw: b,\n logics: b.logics.map(logicToLogicIR),\n deps: [],\n name: b.name,\n params: b.getContextLogicParams().map(paramToIR),\n kind: isFrontendEvent ? 'frontend-lifecycle' : 'view-lifecycle',\n });\n const aggregatedActions = splitLogicsInActionToMultipleActions(action);\n actions.push(...aggregatedActions);\n });\n /**\n * 页面逻辑\n */\n bcOrView.logics.forEach((logic) => {\n actions.push(\n new StateActionIR({\n __raw: logic,\n deps: [],\n name: logic.name,\n params: logic.params.map(paramToIR),\n logics: [logic].map(logicToLogicIR),\n kind: 'standalone',\n })\n );\n });\n\n /**\n * 入参的声明\n */\n bcOrView.params?.forEach((param) => {\n const state: StateIR = {\n kind: 'local-logic',\n initialization: {\n kind: isView(bcOrView) ? 'url-param' : 'props',\n __raw: paramToIR(param),\n defaultValue: param.defaultValue?.expression\n ? exprToIR(param.defaultValue.expression)\n : undefined,\n },\n identifier: param.name,\n typeAnnotation: param.__TypeAnnotation,\n };\n providedStates.push(state);\n });\n const consumedStateNames: string[] = [];\n\n return {\n consumedStateNames,\n providedStates,\n actions,\n };\n}\n\n// 往ctx中插入tree级别的状态\nfunction enhanceStateContext(ctx: StateContextIR): StateContextIR {\n return ctx\n .provide({\n identifier: 'nasl',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useNasl',\n },\n })\n .provide({\n identifier: '$frontendVariables',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'frontend-variable',\n hookName: 'useFrontendVariables',\n },\n })\n .provide({\n identifier: '$services',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useServices',\n },\n })\n .provide({\n identifier: '$destination',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useDestination',\n },\n })\n .provide({\n identifier: '$library',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useLibrary',\n },\n })\n .provide({\n identifier: '$link',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useLink',\n },\n })\n .provide({\n identifier: 'userInfo',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useUserInfo',\n },\n })\n .provide({\n identifier: '$i18n',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useI18n',\n },\n })\n .provide({\n identifier: 'i18nInfo',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useI18nInfo',\n },\n })\n .provide({\n identifier: 'genInitFromSchema',\n kind: 'tree',\n typeAnnotation: null,\n initialization: {\n kind: 'global-hook',\n hookName: 'useGenInitFromSchema',\n },\n });\n}\n\nfunction provideAsComponentRefIfOk(\n ctx: StateContextIR,\n maybeElementRefName: string | undefined\n): StateIR | undefined {\n if (!maybeElementRefName) {\n return undefined;\n }\n if (isNameAElementRef(maybeElementRefName)) {\n const componentName = extractComponentNameFromElementRefName(maybeElementRefName);\n if (!componentName) {\n return undefined;\n }\n const state = ctx.findComponentRefByComponentName(componentName);\n if (state) {\n return state;\n }\n const refName = componentNameToRefName(componentName);\n const newState: StateIR = {\n kind: 'standalone',\n identifier: refName,\n initialization: {\n kind: 'component-ref',\n componentName,\n },\n typeAnnotation: null,\n };\n ctx.provide(newState);\n return newState;\n }\n}\n\nfunction makeBaseCtx(variables: FrontendVariable[]) {\n const baseCtx = new StateContextIR([], [], [], null);\n return enhanceStateContext(baseCtx);\n}\n\nexport const ApiClientIdentifier = 'apiClient';\nfunction collectApis(logics: Logic[], ctx: StateContextIR): LogicIR[] {\n ctx.provide({\n kind: 'tree',\n identifier: ApiClientIdentifier,\n initialization: {\n kind: 'api-client',\n },\n typeAnnotation: null,\n });\n return logics.map(logicToLogicIR);\n}\n\nfunction collectFrontendExtensionModules(app: App): Module[] {\n const modules = app.dependencies\n .map((node): Module | undefined => {\n if (!isConnector(node) && node.frontends?.length) {\n return node;\n }\n })\n .filter(isNotNil);\n return modules;\n}\n\nfunction recursivelyCollectAndTransformViewsOrBizComponents(\n views: BusinessComponent[],\n baseCtx: StateContextIR\n): BizComponentIR[];\nfunction recursivelyCollectAndTransformViewsOrBizComponents(\n views: View[],\n baseCtx: StateContextIR\n): ViewComponentIR[];\nfunction recursivelyCollectAndTransformViewsOrBizComponents(\n views: View[] | BusinessComponent[],\n baseCtx: StateContextIR\n): GeneralComponentIR[] {\n return views.map((view): GeneralComponentIR => {\n const { providedStates, actions } = collectStatesAndActionsFromView(view);\n const ctx = new StateContextIR(providedStates, [], actions, baseCtx);\n // HACK: 跳过Vue3,为了MemberExpression中isViewElementProperty判断\n if (!['vue3'].includes(view.frontend.frameworkKind)) {\n resolveComponentRefInCurrentLevel(view, ctx);\n }\n const elements = view.elements.map((x) => {\n return extractAsComponentInstanceIR(ctx, x);\n });\n recursivelyBindRefAttrIfNecessary(elements);\n\n const base = {\n stateContext: ctx,\n identifier: view.name,\n elements,\n };\n if (isView(view)) {\n const childComponents = recursivelyCollectAndTransformViewsOrBizComponents(\n view.children,\n baseCtx\n );\n return {\n ...base,\n kind: 'view',\n __raw: view,\n childComponents,\n };\n } else {\n return {\n ...base,\n kind: 'biz-component',\n __raw: view,\n };\n }\n\n /**\n * 解析当前层级的组件中对componentRef的引用\n * @param entryComponent 入口组件\n * @param ctx 上下文\n * @description 对View,不会通过children遍历其子级View\n */\n function resolveComponentRefInCurrentLevel(\n entryComponent: View | BusinessComponent,\n ctx: StateContextIR\n ) {\n let copiedChildren: View[] = [];\n if (isView(entryComponent)) {\n // 对View,为了避免遍历到子页面,先清空子页面\n // 对BizComponent则不存在子页面,无需额外处理\n copiedChildren = entryComponent.children;\n entryComponent.children = [];\n }\n\n entryComponent.traverseStrictChildren((node) => {\n if (isObject(node) && 'playground' in node) {\n node.playground = [];\n }\n if (isMemberExpression(node)) {\n if (\n isIdentifier(node.object) &&\n isIdentifier(node.property) &&\n node.object.name === 'elements' &&\n node.property.name === '$ce'\n ) {\n const currentElement = node.getAncestor('ViewElement') as ViewElement | undefined;\n if (currentElement) {\n const elementRefName: ElementRefName = `elements.${currentElement.name}`;\n const state = provideAsComponentRefIfOk(ctx, elementRefName);\n if (state) {\n // HACK: 避免真的去emit update事件,修改NASL\n node.emit = () => {};\n if (node.parentNode) {\n node.parentNode.emit = () => {};\n }\n node.replaceNode({ name: state.identifier, concept: 'Identifier' });\n }\n }\n } else if (\n isIdentifier(node.object) &&\n node.object.namespace === 'elements.$ce.property'\n ) {\n const currentElement = node.getAncestor('ViewElement') as ViewElement | undefined;\n if (currentElement) {\n const elementRefName: ElementRefName = `elements.${currentElement.name}`;\n const state = provideAsComponentRefIfOk(ctx, elementRefName);\n if (state) {\n node.object = new Identifier({ name: state.identifier });\n }\n }\n }\n } else if (isCallLogic(node)) {\n const state = provideAsComponentRefIfOk(ctx, node.calleeNamespace);\n if (state) {\n node.calleeNamespace = state.identifier;\n }\n }\n });\n\n if (isView(entryComponent)) {\n entryComponent.children = copiedChildren;\n }\n }\n function recursivelyBindRefAttrIfNecessary(instances: ComponentInstanceIR[]) {\n instances.forEach((instance) => {\n // FIXME wudengke 去掉这个case\n if (!instance.__raw) {\n return;\n }\n const found = ctx.findComponentRefByComponentName(instance.__raw.name);\n if (found) {\n const be = bindAttrToIR(\n new BindAttribute({\n // TODO wudengke ref属性名称是个react强相关的常量,应该抽到常量列表中\n name: 'ref',\n type: 'dynamic',\n expression: new Identifier({ name: found.identifier }),\n })\n );\n if (be) {\n instance.attrs.push(be);\n }\n }\n recursivelyBindRefAttrIfNecessary(instance.children);\n });\n }\n });\n}\n\nfunction collectAllViews(app: App, frontend: Frontend, ctx: StateContextIR) {\n const topLevelViews = collectTopLevelViews(app, frontend);\n const views = recursivelyCollectAndTransformViewsOrBizComponents(topLevelViews, ctx);\n return views;\n}\n\nfunction collectBizComponents(\n app: App,\n frontend: Frontend,\n ctx: StateContextIR,\n needFrontendEventWrapper: boolean\n) {\n // TODO: 业务组件逻辑抽成一个插件\n const bizComponents =\n app.frontendTypes.find((x) => x.kind === frontend.type)?.businessComponents ?? [];\n\n if (needFrontendEventWrapper) {\n const wrapperBizComponent = BusinessComponent.from({\n bindEvents: [\n ...frontend.bindEvents,\n new BindEvent({\n name: 'rendered',\n logics: [\n new Logic({\n body: [\n CallLogic.from({\n calleeNamespace: 'window',\n calleeName: 'rendered',\n }),\n ],\n }),\n ],\n }),\n ],\n name: 'FrontendEventWrapper',\n params: [],\n elements: [\n new ViewElement({\n tag: 'Router',\n name: 'routerContainer',\n children: [],\n }),\n ],\n });\n bizComponents.push(wrapperBizComponent);\n }\n\n for (const c of bizComponents) {\n c.parentNode = frontend;\n c.traverseStrictChildren((node) => {\n if (isViewElement(node) && node.tag === 'IdeSlot') {\n node.tag = 'template';\n node.bindAttrs.push(\n BindAttribute.from(\n {\n name: 'children',\n type: 'dynamic',\n expression: MemberExpression.from({\n object: {\n concept: 'Identifier',\n name: 'props',\n folded: false,\n },\n property: {\n concept: 'Identifier',\n name: trueKebab2Camel(node.name),\n folded: false,\n },\n }),\n },\n node,\n 'bindAttrs'\n )\n );\n }\n });\n }\n const components = recursivelyCollectAndTransformViewsOrBizComponents(bizComponents, ctx);\n return components;\n}\n\nconst logger = Logger('IR builder');\n\n@injectable()\nexport class NASLAppIRBuilderPlugin implements NASLDomain.IRBuilder {\n constructor(\n @multiInject(ServiceMetaKind.IRPreProcesser)\n @optional()\n private preProcessors?: NASLDomain.IRPreProcesser[],\n @multiInject(ServiceMetaKind.IRPostProcesser)\n @optional()\n private postProcessors?: NASLDomain.IRPostProcesser[]\n ) {}\n\n private selfBuildIR(app: App, frontend: Frontend, config: CommonAppConfig) {\n {\n config.debug && breakpoint.genBreakpoints(app);\n const baseCtx = makeBaseCtx(frontend.variables);\n const apis = collectApis(app.logics, baseCtx);\n const views = collectAllViews(app, frontend, baseCtx);\n const bizComponents = collectBizComponents(\n app,\n frontend,\n baseCtx,\n !!config.needFrontendEventWrapper\n );\n views.flatMap((x) => x.childComponents);\n\n let ir = {\n baseCtx,\n configs: buildConfigs(),\n apis,\n views,\n bizComponents,\n packages: collectPackages(),\n };\n\n return ir;\n\n function buildConfigs(): NASLAppIR['configs'] {\n const self = { ...metadataPlugin.functions };\n const basePlatformConfig = self.makeBasePlatformConfig(app, frontend, config);\n const metaData = genMetaData(app, frontend, config);\n const events = frontend.bindEvents.map(bindViewElementEventToIR).filter(isNotNil);\n return {\n config,\n basePlatformConfig,\n events,\n metaData,\n globalVariables: frontend.variables,\n themeCSS: frontend.genThemeCSS(),\n document: {\n icon: frontend.documentIcon,\n },\n frontendDesc: frontend,\n microApp: app.integration?.microApp,\n };\n }\n\n function collectPackages(): Package[] {\n const extensionPackages: Package[] = collectFrontendExtensionModules(app).map((m) => {\n return { kind: 'extension', name: m.name, version: m.version, hasCss: true };\n });\n logger.debug({ extensionPackages });\n\n const frameworkKind = frontend.frameworkKind;\n const uiLib = getPredefinedMaterialByTags(['ui', frontend.type, frameworkKind]);\n return [...extensionPackages, uiLib as unknown as Package];\n }\n }\n }\n\n buildIR(app: App, frontend: Frontend, config: CommonAppConfig): NASLAppIR {\n this.enchanceHackForAppPackageInfos(app, config);\n this.preProcessors?.forEach((processor) => {\n const res = processor.preProcess(app, frontend, config);\n app = res.app;\n frontend = res.frontend;\n config = res.config;\n });\n let ir = this.selfBuildIR(app, frontend, config);\n this.postProcessors?.forEach((processor) => {\n ir = processor.postProcess(ir, config);\n });\n return ir;\n }\n\n private enchanceHackForAppPackageInfos(app: App, commonAppConfig: CommonAppConfig) {\n app.loadPackageInfos(getPredefinedMaterialConfig());\n const config = getConfig();\n if (commonAppConfig.allNodesAPI) {\n config.allNodesAPI = commonAppConfig.allNodesAPI;\n }\n config.allNodesAPI ??= {};\n initialize({\n getConfig: () => {\n return config;\n },\n });\n }\n}\n","import {\n App,\n Module,\n View,\n Entity,\n Structure,\n Enum,\n uiStructures,\n collectionStructures,\n configurationEnums,\n processV2Enums,\n interfaceStructures,\n processStructures,\n processV2Structures,\n Connector,\n Logic,\n Interface,\n Process,\n BaseNode,\n Frontend,\n authStructures,\n httpStructures,\n MetadataType,\n TypeAnnotation,\n asserts,\n errorStructures,\n SyntaxNode,\n FrontendType,\n} from '@lcap/nasl-concepts';\n\nimport { createCompilerState } from '@lcap/nasl-translator';\nimport { sanityCheck, toRaw } from './utils';\n\n// 生成typeKey\nfunction genSortedTypeKey(typeAnnotation: any) {\n const { typeKind, typeNamespace, typeName, typeArguments, properties } = typeAnnotation || {};\n const typeKeyArr = [];\n if (typeKind === 'union') {\n // 联合类型\n if (Array.isArray(typeArguments)) {\n // 按返回的每个具体项排序\n const childTypeArgs: any = typeArguments\n .map((typeArg) => genSortedTypeKey(typeArg))\n .sort((name1, name2) => (name1 > name2 ? 1 : -1));\n typeKeyArr.push(childTypeArgs.join(' | '));\n }\n } else if (typeKind === 'anonymousStructure') {\n // 匿名数据结构\n typeKeyArr.push('{');\n if (Array.isArray(properties)) {\n // 按匿名数据结构的key排序\n const childTypeArgs: any = properties\n .sort(({ name: name1 }, { name: name2 }) => (name1 > name2 ? 1 : -1))\n .map((typeArg) => {\n const { name: typeArgName, typeAnnotation: typeArgTypeAnnotation } = typeArg || {};\n return `${typeArgName}: ${genSortedTypeKey(typeArgTypeAnnotation)}`;\n });\n typeKeyArr.push(childTypeArgs.join(', '));\n }\n typeKeyArr.push('}');\n } else {\n const typeArr = [];\n typeNamespace && typeArr.push(typeNamespace);\n typeName && typeArr.push(typeName);\n const typeKey = typeArr.join('.');\n typeKey && typeKeyArr.push(typeKey);\n if (typeKind === 'generic') {\n typeKeyArr.push('<');\n if (Array.isArray(typeArguments)) {\n // 必须按typeArguments定义的顺序,否则实参位置不对\n const childTypeArgs: any = typeArguments.map((typeArg) => genSortedTypeKey(typeArg));\n typeKeyArr.push(childTypeArgs.join(', '));\n }\n typeKeyArr.push('>');\n }\n }\n return typeKeyArr.join('');\n}\n\nexport function genMetaData(_app: App, frontend: Frontend, config: any) {\n const isPreviewFe = config?.isPreviewFe ?? false;\n const isPureFeMode = config?.isPureFeMode ?? false;\n const isExport = config?.isExport ?? false;\n const modules: (Module | Connector)[] = [];\n const views: View[] = [];\n const entities: Entity[] = [];\n const structures: Structure[] = [];\n const enums: Enum[] = [];\n const logics: Logic[] = [];\n const interfaces: Interface[] = [];\n const processes: Process[] = [];\n\n // @ts-expect-error\n const app: App = _app.__v_raw ?? _app;\n frontend.views && views.push(...frontend.views);\n if (Array.isArray(app.dataSources)) {\n app.dataSources.forEach((dataSource) => {\n if (Array.isArray(dataSource.entities)) {\n entities.push(...dataSource.entities);\n }\n });\n }\n app.structures && structures.push(...app.structures);\n app.enums && enums.push(...app.enums);\n app.logics && logics.push(...app.logics);\n app.processes && processes.push(...app.processes);\n\n app.dependencies && modules.push(...app.dependencies);\n app.interfaceDependencies && modules.push(...app.interfaceDependencies);\n app.connectorDependencies && modules.push(...app.connectorDependencies);\n app.sharedAppDependencies && modules.push(...app.sharedAppDependencies);\n\n // 内置国际化枚举\n enums.push(...configurationEnums);\n // 内置流程枚举\n enums.push(...processV2Enums);\n app.interfaces.forEach((it) => {\n it && interfaces.push(it as Interface);\n });\n modules.forEach((module: Module | Connector) => {\n module.views && views.push(...module.views);\n module.structures && structures.push(...module.structures);\n module.enums && enums.push(...module.enums);\n module.logics && logics.push(...module.logics);\n module.interfaces && interfaces.push(...(module.interfaces as Interface[]));\n if (Array.isArray(module.dataSources)) {\n module.dataSources.forEach((dataSource) => {\n if (Array.isArray(dataSource.entities)) {\n entities.push(...dataSource.entities);\n }\n });\n }\n\n if (asserts.isConnector(module)) {\n module.namespaces.forEach((namespace) => {\n logics.push(...namespace.logics);\n });\n }\n });\n const dataTypes: (Entity | Structure | Enum)[] = [];\n\n const dataTypesMap: {\n [id: string]: BaseNode;\n } = {};\n const originFrontendVariables = frontend.variables || [];\n const frontendEvents = frontend.bindEvents;\n const frontendEventsMap: { [id: string]: string } = {};\n\n const enumsMap: {\n [name: string]: {\n [label: string]: string;\n };\n } = {};\n\n const logicsMap: {\n [id: string]: {\n config: {\n serviceType: string;\n };\n url: {\n method: string;\n path: string;\n };\n };\n } = {};\n const _custom: {\n [id: string]: any;\n } = {};\n const allLogics: Logic[] = [];\n\n if (Array.isArray(enums)) {\n dataTypes.push(...enums);\n enums.forEach((node) => {\n let { name, enumItems } = node || {};\n if (node.module) {\n const prefix = node.module.type === 'sharedApp' ? 'sharedApp' : 'extensions';\n name = `${prefix}.${node.module.name}.enums.${name}`;\n } else if (node.name === 'I18nEnum' && node.getNamespace() === 'nasl.configuration.enums') {\n name = 'nasl.configuration.enums.I18nEnum';\n } else if (node?.getNamespace?.() === 'nasl.processV2.enums') {\n name = `nasl.processV2.enums.${name}`;\n }\n const enumObj: {\n [value: string]: string;\n } = {};\n enumItems.forEach(({ label, value }) => {\n enumObj[value] = label?.value;\n });\n enumsMap[name] = enumObj;\n });\n }\n\n if (Array.isArray(entities)) {\n dataTypes.push(...entities);\n entities.forEach((entity) => {\n const { ns } = entity;\n if (Array.isArray(ns?.logics)) {\n allLogics.push(...ns.logics);\n }\n });\n }\n\n if (Array.isArray(structures)) {\n dataTypes.push(...structures);\n }\n\n dataTypes.forEach((node) => {\n const namespace = node.getNamespace();\n const id = `${namespace}.${node.name}`;\n const nodeJson = node.toJSON?.();\n\n if (['Enum'].includes(node.concept)) {\n const { typeName, typeNamespace } = (node as Enum).valueType || {};\n nodeJson.enumItems?.map((item: any) => {\n item.value =\n typeName === 'Long' && typeNamespace === 'nasl.core' ? +item.value : item.value;\n });\n }\n\n // 对存在defaultValue的结构进行翻译储存到defaultCode中\n if (['Entity', 'Structure'].includes(node.concept)) {\n nodeJson.properties.forEach((property: any, index: number) => {\n const { defaultValue } = (node as Entity).properties[index];\n if (defaultValue?.expression) {\n property.defaultCode = {\n code: defaultValue.toJS(createCompilerState('', { getVuePrototype: true })),\n executeCode: [\n 'NewComposite',\n 'NewList',\n 'NewMap',\n 'StringInterpolation',\n 'BinaryExpression',\n 'UnaryExpression',\n 'StringLiteral',\n ].includes(defaultValue.expression.concept),\n };\n } else {\n property.defaultCode = {};\n }\n });\n }\n if (Array.isArray(nodeJson.properties)) {\n const app = node.getAncestor('App') as App;\n nodeJson.properties.forEach((property: any) => {\n const { typeAnnotation = {} } = property;\n if (typeAnnotation?.typeNamespace?.endsWith('.metadataTypes')) {\n let originType: TypeAnnotation | undefined;\n if (typeAnnotation.typeNamespace === 'app.metadataTypes') {\n originType = app.metadataTypes?.find(\n (metadataType: MetadataType) => metadataType.name === typeAnnotation.typeName\n )?.typeAnnotation;\n } else if (\n typeAnnotation.typeNamespace?.startsWith('extensions.') &&\n typeAnnotation.typeNamespace?.endsWith('.metadataTypes')\n ) {\n const dependencyName = typeAnnotation.typeNamespace\n ?.replace('extensions.', '')\n .replace('.metadataTypes', '');\n originType =\n app.dependencies\n ?.find((dependency: Module) => dependency.name === dependencyName)\n ?.metadataTypes?.find((ele: MetadataType) => ele.name === typeAnnotation.typeName)\n ?.typeAnnotation ?? ({} as TypeAnnotation);\n }\n typeAnnotation.typeKind = 'primitive';\n typeAnnotation.typeNamespace = 'nasl.core';\n typeAnnotation.typeName = originType?.typeName;\n }\n });\n }\n dataTypesMap[id] = nodeJson;\n const { properties } = node as any;\n if (Array.isArray(properties)) {\n properties.forEach((property) => {\n collectTypeAnnotation(property?.typeAnnotation);\n });\n }\n });\n\n [\n {\n namespace: 'nasl.auth',\n list: authStructures,\n },\n {\n namespace: 'nasl.ui',\n list: uiStructures,\n },\n {\n namespace: 'nasl.collection',\n list: collectionStructures,\n },\n {\n namespace: 'nasl.interface',\n list: interfaceStructures,\n },\n {\n namespace: 'nasl.process',\n list: processStructures,\n },\n {\n namespace: 'nasl.processV2',\n list: processV2Structures,\n },\n {\n namespace: 'nasl.http',\n list: httpStructures,\n },\n {\n namespace: 'nasl.error',\n list: errorStructures,\n },\n ].forEach((item) => {\n const { namespace, list } = item || {};\n if (Array.isArray(list)) {\n list.forEach((node) => {\n const id = `${namespace}.${node.name}`;\n dataTypesMap[id] = node.toJSON?.();\n const { properties } = node as any;\n if (Array.isArray(properties)) {\n properties.forEach((property, index) => {\n collectTypeAnnotation(property?.typeAnnotation);\n const defaultValue = property.defaultValue;\n if (defaultValue?.expression) {\n // @ts-expect-error\n const propertyJSON = dataTypesMap[id]?.properties?.[index];\n if (propertyJSON) {\n const defaultCode = {\n code: defaultValue.toJS(createCompilerState('')),\n executeCode: [\n 'NewComposite',\n 'NewList',\n 'NewMap',\n 'StringInterpolation',\n 'BinaryExpression',\n 'UnaryExpression',\n 'StringLiteral',\n ].includes(defaultValue.expression.concept),\n };\n propertyJSON.defaultCode = defaultCode;\n }\n }\n });\n }\n });\n }\n });\n\n if (Array.isArray(logics)) {\n allLogics.push(...logics);\n }\n\n allLogics.forEach((node) => {\n const namespace = node.getNamespace();\n const id = namespace ? `${namespace}.${node.name}` : node.name;\n logicsMap[id] = isPreviewFe ? node.toMockService() : node.toService();\n });\n\n processes.forEach((process) => {\n if (Array.isArray(process.logics)) {\n process.logics.forEach((node) => {\n const namespace = node.getNamespace();\n const id = namespace ? `${namespace}.${node.name}` : node.name;\n logicsMap[id] = node.toProcessService();\n });\n }\n });\n\n interfaces.forEach((interfaceItem: Interface) => {\n let result: any = interfaceItem.toService();\n if (isPureFeMode && isExport) {\n // \"/gw/zzze/rest/axax\"把 /gw/zzze 替换成真实域名\n // result.url.path = result.url.path.replace(/^\\/[^/]+\\/[^/]+\\//, `${svcDomain}/`);\n result.url.path = result.url.path.replace(/^\\/[^/]+\\/[^/]+\\//, '/');\n }\n if (isPreviewFe) {\n result = interfaceItem.toMockService();\n }\n\n _custom[`${interfaceItem.getNamespace()}.${interfaceItem.name}`] = result;\n });\n\n function shouldSkipThisNode(nd: SyntaxNode | undefined) {\n if (!nd) {\n return true;\n }\n if (nd.concept === 'ViewElement') {\n return true;\n }\n if (\n nd.concept === 'Identifier' &&\n nd.parentNode?.concept === 'MemberExpression' &&\n nd.parentNode?.property?.name === '$ce'\n ) {\n return true;\n }\n return false;\n }\n\n const f: FrontendType | Frontend = toRaw(frontend?.getAncestor('FrontendType') || frontend);\n f?.traverseStrictChildren(\n (node: SyntaxNode) => {\n if (shouldSkipThisNode(node)) {\n return;\n }\n // @ts-expect-error .typeAnnotation 类型有问题\n const ty: TypeAnnotation | undefined = node?.typeAnnotation || node?.__TypeAnnotation;\n collectTypeAnnotation(ty);\n },\n ['virtualParams']\n );\n\n const frontendVariables = [...originFrontendVariables];\n if (Array.isArray(frontendVariables)) {\n frontendVariables?.forEach((frontendVariable) => {\n const { defaultValue } = frontendVariable;\n const typeAnnotation = frontendVariable.typeAnnotation || frontendVariable.__TypeAnnotation;\n if (typeAnnotation?.typeNamespace?.endsWith('.metadataTypes')) {\n const referenceNode =\n app?.findNodeByCompleteName(\n typeAnnotation.typeNamespace + '.' + typeAnnotation.typeName\n ) || {};\n const typeAn = referenceNode.typeAnnotation || {};\n typeAnnotation.typeKind = typeAn.typeKind;\n typeAnnotation.typeNamespace = typeAn.typeNamespace;\n typeAnnotation.typeName = typeAn.typeName;\n }\n if (defaultValue?.expression) {\n frontendVariable.defaultCode = {\n code: defaultValue.toJS(createCompilerState('', { getVuePrototype: true })),\n executeCode: [\n 'NewComposite',\n 'NewList',\n 'NewMap',\n 'StringInterpolation',\n 'BinaryExpression',\n 'UnaryExpression',\n 'StringLiteral',\n ].includes(defaultValue.expression.concept),\n };\n } else {\n frontendVariable.defaultCode = {};\n }\n collectTypeAnnotation(typeAnnotation);\n });\n }\n if (Array.isArray(frontendEvents)) {\n frontendEvents.forEach((item) => {\n const typeAnnotation = (item as any)?.typeAnnotation || item.__TypeAnnotation;\n collectTypeAnnotation(typeAnnotation);\n });\n }\n\n function collectTypeAnnotation(typeAnnotation: TypeAnnotation | undefined) {\n // FIXME wudengke 确认是否需要这个东西\n if (typeAnnotation && sanityCheck(typeAnnotation)) {\n const sortedTypeKey = genSortedTypeKey(typeAnnotation);\n if (!dataTypesMap[sortedTypeKey]) {\n const json = typeAnnotation?.toJSON?.() ?? typeAnnotation;\n // HACK: 删掉 name,但故意不处理 name=\"\"的情形\n if (json.name !== '') {\n delete json.name;\n }\n dataTypesMap[sortedTypeKey] = json;\n const { properties, typeArguments } = (dataTypesMap[sortedTypeKey] || {}) as any;\n if (Array.isArray(properties)) {\n properties.forEach((property) => {\n collectTypeAnnotation(property?.typeAnnotation);\n });\n }\n if (Array.isArray(typeArguments)) {\n typeArguments.forEach((typeArg) => {\n collectTypeAnnotation(typeArg);\n });\n }\n }\n }\n }\n frontendEvents.forEach((logic) => {\n const name = logic.getViewEventName();\n const fn = (logic as any).toFunction();\n frontendEventsMap[name] = fn;\n if (isPureFeMode) {\n delete frontendEventsMap.beforeRouter;\n }\n });\n return {\n frontendEvents: frontendEventsMap,\n frontendVariables,\n dataTypesMap: dataTypesMapTrimming(dataTypesMap),\n enumsMap,\n logicsMap,\n servicesMap: {\n _custom,\n },\n };\n}\n\nfunction dataTypesMapTrimming(res: { [id: string]: BaseNode }): { [id: string]: BaseNode } {\n function deleteEnumItemsTypeAnnotation() {\n Object.keys(res).forEach((key) => {\n const value = res[key];\n if (value?.concept === 'Enum') {\n const e = value as Enum;\n e.enumItems?.forEach((x) => {\n if (x.label) {\n // @ts-expect-error\n delete x.label.typeAnnotation;\n }\n });\n }\n });\n }\n\n function deleteChangedTime() {\n // 删掉 _changedTime 字段\n Object.keys(res).forEach((key) => {\n const value = res[key];\n if (value && '_changedTime' in value) {\n // @ts-expect-error\n delete value._changedTime;\n }\n });\n }\n // TODO wudengke 直接在类型检查器中修复\n function deleteDefaultValueTypeAnnotationForNullExpression() {\n Object.keys(res).forEach((key) => {\n const value = res[key];\n // 预期: value 为 Structure 和 Entity\n if ('properties' in value) {\n const s = value as Structure | Entity;\n s.properties?.forEach((p) => {\n // @ts-expect-error\n if (p.defaultValue?.expression === null && p.defaultValue.typeAnnotation) {\n // @ts-expect-error\n delete p.defaultValue.typeAnnotation;\n }\n });\n }\n });\n }\n deleteEnumItemsTypeAnnotation();\n deleteChangedTime();\n deleteDefaultValueTypeAnnotationForNullExpression();\n return res;\n}\n","import { type TypeAnnotation } from '@lcap/nasl-concepts';\nimport { union, uniq } from 'lodash';\nimport { isNotNil } from '../utils/types';\n\ntype TypeAnnotationVisitor = Partial<\n Record<TypeAnnotation['typeKind'], (ty: TypeAnnotation, boundParamNames: string[]) => void>\n>;\n\nexport const visitTypeAnnotation = (\n ty: TypeAnnotation,\n visitor: TypeAnnotationVisitor,\n paramNames: string[] = []\n): void => {\n if (!ty) {\n return;\n }\n\n switch (ty.typeKind) {\n case 'primitive':\n visitor.primitive?.(ty, paramNames);\n break;\n case 'literal':\n visitor.literal?.(ty, paramNames);\n break;\n case 'typeParam':\n visitor.typeParam?.(ty, paramNames);\n break;\n case 'union':\n visitor.union?.(ty, paramNames);\n if (Array.isArray(ty.typeArguments)) {\n ty.typeArguments.forEach((typeArg) => {\n visitTypeAnnotation(typeArg, visitor, paramNames);\n });\n }\n break;\n case 'anonymousStructure':\n visitor.anonymousStructure?.(ty, paramNames);\n if (Array.isArray(ty.properties)) {\n ty.properties.forEach((property) => {\n if (property.typeAnnotation) {\n visitTypeAnnotation(property.typeAnnotation, visitor, paramNames);\n }\n });\n }\n break;\n case 'generic':\n visitor.generic?.(ty, paramNames);\n if (Array.isArray(ty.typeArguments)) {\n ty.typeArguments.forEach((typeArg) => {\n visitTypeAnnotation(typeArg, visitor);\n });\n }\n break;\n case 'conditional':\n visitor.conditional?.(ty, paramNames);\n if (ty.checkType) {\n visitTypeAnnotation(ty.checkType, visitor);\n }\n if (ty.extendsType) {\n visitTypeAnnotation(ty.extendsType, visitor);\n }\n if (ty.trueType) {\n visitTypeAnnotation(ty.trueType, visitor);\n }\n if (ty.falseType) {\n visitTypeAnnotation(ty.falseType, visitor);\n }\n break;\n case 'function': {\n visitor.function?.(ty, paramNames);\n const newParamNames = union(\n paramNames,\n (ty.typeParams?.map((param) => param.typeName) || []).filter(isNotNil)\n );\n if (ty.typeArguments) {\n ty.typeArguments.forEach((param) => {\n visitTypeAnnotation(param, visitor, newParamNames);\n });\n }\n if (ty.returnType) {\n ty.returnType.forEach((returnType) => {\n visitTypeAnnotation(returnType, visitor, newParamNames);\n });\n }\n break;\n }\n case 'indexedAccess':\n visitor.indexedAccess?.(ty, paramNames);\n if (ty.objectType) {\n visitTypeAnnotation(ty.objectType, visitor, paramNames);\n }\n if (ty.indexType) {\n visitTypeAnnotation(ty.indexType, visitor, paramNames);\n }\n break;\n case 'reference':\n visitor.reference?.(ty, paramNames);\n break;\n default: {\n const checkExhaustive: never = ty.typeKind;\n }\n }\n};\n\nconst hasNaslTyParamAnn = (ty: TypeAnnotation): boolean => {\n if (!ty) {\n return false;\n }\n\n if (ty.typeKind === 'primitive' || ty.typeKind === 'literal') {\n return false;\n }\n\n if (ty.typeKind === 'typeParam') {\n return true;\n }\n\n if (ty.typeArguments?.length) {\n for (const typeArg of ty.typeArguments) {\n if (hasNaslTyParamAnn(typeArg)) return true;\n }\n }\n\n if (ty.returnType?.length) {\n for (const retType of ty.returnType) {\n if (hasNaslTyParamAnn(retType)) return true;\n }\n }\n\n if (ty.properties?.length) {\n for (const prop of ty.properties) {\n if (prop.typeAnnotation && hasNaslTyParamAnn(prop.typeAnnotation)) return true;\n }\n }\n\n if (ty.constraints && hasNaslTyParamAnn(ty.constraints)) {\n return true;\n }\n\n if (ty.checkType && hasNaslTyParamAnn(ty.checkType)) return true;\n if (ty.extendsType && hasNaslTyParamAnn(ty.extendsType)) return true;\n if (ty.trueType && hasNaslTyParamAnn(ty.trueType)) return true;\n if (ty.falseType && hasNaslTyParamAnn(ty.falseType)) return true;\n if (ty.indexType && hasNaslTyParamAnn(ty.indexType)) return true;\n if (ty.objectType && hasNaslTyParamAnn(ty.objectType)) return true;\n\n return false;\n};\n\n/**\n * @deprecated 统一处理!!!\n * @param observed\n * @returns\n */\nexport function toRaw<T>(observed: T): T {\n const raw = observed && (observed as any).__v_raw;\n return raw ? toRaw(raw) : observed;\n}\n\n/**\n * 检查类型标注是否合(某个隐式的)法\n * @param ty\n * @returns\n * @deprecated 临时用一下\n */\nexport function sanityCheck(ty: TypeAnnotation | undefined | null): ty is TypeAnnotation {\n if (!ty) {\n return false;\n }\n let failed = false;\n visitTypeAnnotation(ty, {\n typeParam: (t, boundParamNames) => {\n // 出现自由类型变元,则失败\n failed ||= !boundParamNames.includes(t.typeName ?? 'what');\n },\n primitive: (t) => {\n // 出现奇怪的东西,则失败\n failed ||= t.typeName === 'void' || t.typeName === 'any';\n },\n function: (t) => {\n failed = true;\n },\n anonymousStructure: (t) => {},\n generic: (t) => {},\n conditional: (t) => {},\n union: (t) => {},\n reference: (t) => {},\n indexedAccess: (t) => {\n failed = true;\n },\n literal: () => {\n failed = true;\n },\n });\n return !failed;\n}\n","export function isNotNil<T>(x: T): x is NonNullable<T> {\n return x !== null && x !== undefined;\n}\n\nexport function ensureArray<T>(value: T | T[]): T[] {\n if (Array.isArray(value)) {\n return value;\n }\n return [value];\n}\n","import { BindEvent, Logic } from '@lcap/nasl-concepts';\nimport { ExprIR, IdentifierString, LogicIR, ParamIR, TypeAnnotationIR } from './ir';\nimport { ComponentName } from '../utils/component';\n\ntype BaseStateIR = {\n /**\n * 状态的标识符\n */\n identifier: IdentifierString;\n /**\n * 状态的类型\n */\n typeAnnotation: TypeAnnotationIR | null;\n};\n\nexport type LocalLogicStateIR = BaseStateIR & {\n kind: 'local-logic';\n initialization:\n | {\n kind: 'static';\n value: ExprIR;\n }\n | {\n kind: 'props';\n defaultValue?: ExprIR;\n __raw: ParamIR;\n }\n | {\n kind: 'url-param';\n defaultValue?: ExprIR;\n __raw: ParamIR;\n }\n | undefined;\n};\n\nexport type TreeStateIR = BaseStateIR & {\n kind: 'tree';\n initialization:\n | {\n kind: 'global-hook';\n hookName: string;\n }\n | {\n // 前端全局变量\n kind: 'frontend-variable';\n hookName: 'useFrontendVariables';\n }\n | {\n kind: 'api-client';\n };\n};\n\nexport type LocalIndividualStateIRComponentRef = {\n kind: 'standalone';\n initialization: {\n kind: 'component-ref';\n componentName: ComponentName;\n };\n};\n\nexport type LocalVariableStateIR = {\n kind: 'standalone';\n initialization: {\n kind: 'variable';\n left: string;\n right: string;\n };\n};\n\nexport type LocalIndividualStateIR = BaseStateIR &\n (LocalIndividualStateIRComponentRef | LocalVariableStateIR);\n\n/**\n * 状态\n */\nexport type StateIR = LocalIndividualStateIR | TreeStateIR | LocalLogicStateIR;\nexport class StateActionIR {\n __raw: BindEvent | Logic;\n // TODO wudengke 说不定可以去掉\n deps?: StateIR[];\n params: ParamIR[];\n logics: LogicIR[];\n /**\n * 这个动作handler的名字\n * @example handleClick\n */\n name: string;\n kind:\n | 'standalone'\n /**\n * 页面级别的生命周期\n */\n | 'view-lifecycle'\n /**\n * 端级别的生命周期\n */\n | 'frontend-lifecycle';\n constructor(props: StateActionIR) {\n Object.assign(this, props);\n }\n}\n\nexport function isLocalIndividualStateIRComponentRef(ir: StateIR): ir is LocalIndividualStateIR & LocalIndividualStateIRComponentRef {\n return ir.kind === 'standalone' && ir.initialization.kind === 'component-ref';\n}\n","import { isNotNil } from './types';\n\n/**\n * @deprecated\n */\nexport function todo(): never {\n throw new Error('todo');\n}\n\nexport function notImplemented(a?: unknown): never {\n const value = a ? JSON.stringify(a) : String(a);\n throw new Error(`not implemented for ${value}`);\n}\n\nexport function neverImplemented(a?: unknown): never {\n const value = a ? JSON.stringify(a) : String(a);\n throw new Error(`never implemented for ${value}. Should never be here!`);\n}\n\nexport function assertNever(a?: never): never {\n throw new Error(`assertNever failed: ${JSON.stringify(a)}`);\n}\n\nexport function assertNotEmptyString<T extends string | undefined | null>(s: T, msg?: string) {\n if (s !== '') {\n return;\n }\n throw new Error(`[非空串断言失败] 预期非空: ${msg ?? s}`);\n}\n\nexport function assertNotNil<T>(s: T, msg?: string): asserts s is NonNullable<T> {\n if (isNotNil(s)) {\n return;\n }\n throw new Error(`[非空断言失败] 预期非空: ${msg ?? s}`);\n}\n","import { GeneralComponentIR, ReferencedComponent, ReferencedLibComponent } from '../types/ir';\n\n/**\n * @example \"elements.saveModal.logics\"\n */\nexport type ElementRefName = `elements.${string}`;\n/**\n * @example \"tableView_1\"\n */\nexport type ComponentName = string & { readonly __tag?: 'componentName' };\nexport const isNameAElementRef = (name: string): name is ElementRefName => {\n const ComponentRefPrefix = 'elements.';\n return name.startsWith(ComponentRefPrefix);\n};\nexport const extractComponentNameFromElementRefName = (\n name: ElementRefName\n): ComponentName | undefined => {\n return name.split('.').at(1);\n};\n\nexport const componentNameToRefName = (name: string): string => {\n return `${name}Ref`;\n};\nexport function isComponentFromLib(c: ReferencedComponent): c is ReferencedLibComponent {\n return c.kind === 'library';\n}\n\nexport function isReferencedComponentATemplate(c: ReferencedComponent): boolean {\n return c.tag === 'template';\n}\n","import { Argument, CallFunction, StringLiteral, Unparsed, Variable } from '@lcap/nasl-concepts';\n\nexport function findConceptKeyWordIndexFromNamespace(namespace: string, keyword: string) {\n const namespaceArr = namespace?.split('.') || [];\n const start = namespaceArr[0];\n const mod = start === 'app' ? 1 : 0;\n return namespaceArr.findIndex((namespaceItem, index) => {\n if (index % 2 === mod) {\n return namespaceItem === keyword;\n }\n return false;\n });\n}\n\nexport function prepareVariableDefaultValue(s: Variable) {\n const typeAnnotation = s.typeAnnotation || s.__TypeAnnotation;\n let { sortedTypeKey, typeKind, typeName, typeNamespace } = typeAnnotation || {};\n if (typeNamespace?.endsWith('.metadataTypes')) {\n const referenceNode = s.app.findNodeByCompleteName(typeNamespace + '.' + typeName) || {};\n const typeAn = referenceNode.typeAnnotation || {};\n sortedTypeKey = `${typeAn.typeNamespace}.${typeAn.typeName}`;\n typeKind = typeAn.typeKind;\n typeName = typeAn.typeName;\n }\n const needGenInitFromSchema = typeAnnotation && (!['primitive'].includes(typeKind) || typeName === 'DateTime');\n const defaultExpr = s.defaultValue?.expression ? s.defaultValue.expression : new Unparsed({ code: undefined });\n if (needGenInitFromSchema) {\n const newNode = CallFunction.from(\n {\n calleeName: 'genInitFromSchema',\n arguments: [new Argument({ expression: new StringLiteral({ value: sortedTypeKey }) }), new Argument({ expression: defaultExpr })],\n },\n s.parentNode,\n s.parentKey\n );\n return newNode;\n }\n return defaultExpr;\n}\n","import { firstUpperCase } from '@lcap/nasl-utils';\nimport { isNotNil } from './types';\n\nexport const trueKebab2Camel = (name: string) => {\n return name.replaceAll('_', '-').replace(/(?:-)([a-zA-Z0-9])/g, (m, $1) => $1.toUpperCase());\n};\n\nexport const kebab2Pascal = (s: string) => firstUpperCase(trueKebab2Camel(s));\n\nexport function startsWithUpperCase(str: string): boolean {\n return /^[A-Z]/.test(str);\n}\n\nexport function isNotEmptyString(value: string | undefined | null): value is string {\n return isNotNil(value) && value !== '';\n}\n\nexport function capitalizeFirstLetter (str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}","/**\n * NASL 插件\n */\nexport interface NASLPlugin<Functions extends {} = {}> {\n name: string;\n functions: Functions;\n}\n/**\n * 使用简单方法构建插件\n *\n * @deprecated 请使用基于inversify的依赖注入方式开发插件\n */\nexport function makePlugin<Functions extends {}>({\n name,\n functions,\n}: NASLPlugin<Functions>) {\n const plugin = {\n name,\n functions,\n };\n return plugin;\n}\n","import { BindStyle, Identifier, Param } from '@lcap/nasl-concepts';\nimport { isBindStyle } from '@lcap/nasl-concepts/asserts';\nimport { escape } from 'html-escaper';\nimport { inject, injectable, multiInject, optional } from 'inversify';\nimport { flatten, isObject, isString, uniq } from 'lodash';\nimport { GeneratorInfrastructureDomain, JavaScriptDomain } from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { isLocalIndividualStateIRComponentRef } from '../../types';\nimport {\n BindAttributeIR,\n BindDirectiveIR,\n BindEventIR,\n ComponentInstanceIR,\n ExprIR,\n GeneralComponentIR,\n NASLAppIR,\n ReferencedComponent,\n ViewComponentIR,\n} from '../../types/ir';\nimport { assertNever, notImplemented } from '../../utils/assert';\nimport { isComponentFromLib } from '../../utils/component';\nimport { jsonStringifyKeepUndefined } from '../../utils/json';\nimport { Logger } from '../../utils/logger';\nimport { FolderPath, folderPathToString } from '../../utils/path';\nimport { isNotEmptyString, kebab2Pascal, trueKebab2Camel } from '../../utils/str';\nimport { isNotNil } from '../../utils/types';\nimport { apiClientPlugin } from '../api-client-plugin';\nimport { StateContextIR, inferChangeEventNameFromAttrName } from '../ir-builder-plugin';\nimport { JSXNode, styleStringToInlineObject } from '../language/jsx-codegen-plugin';\nimport { codeFormatPlugin } from '../misc/code-format-plugin';\nimport { i18nPlugin } from '../misc/i18n-plugin';\nimport { PlatformConfig } from '../misc/metadata-plugin';\nimport { OrganizedFile } from '../misc/project-organization-plugin';\nimport { routesExtractionPlugin } from '../misc/routes-extraction-plugin';\nimport { reactComponentLibHackPlugin } from './react-component-lib-hack-plugin';\nimport { reactRouterPlugin } from './react-router-plugin';\n\nconst logger = Logger('react codegen');\n\n/**\n * 各类React Hooks\n */\nexport type ReactHook =\n | {\n /**\n * ReactHook的种类\n */\n kind: 'useEffect';\n /**\n * 函数体\n */\n body: string;\n /**\n * deps 数组\n */\n deps: ExprIR[];\n }\n | {\n kind: 'useCallback';\n /**\n * 所声明的变量名字\n * @example\n *\n * ```\n * \"handleClick\"\n * ```\n */\n declaration: string;\n /**\n * deps数组\n */\n deps: ExprIR[];\n /**\n * 函数体\n */\n body: string;\n }\n | {\n kind: 'useState';\n /**\n * 声明的变量名字\n */\n declarations: [] | [string] | [string, string];\n /**\n * 初始值\n */\n initial: ExprIR | undefined;\n }\n | {\n /**\n * 完全自定义的Hook\n */\n kind: 'free';\n /**\n * 调用这个hook的代码\n *\n * @example\n * ```\n * `const localStore = useLocalObservable(()=>{\n return {};\n })`\n * ```\n */\n code: string;\n /**\n * 此 hook 需要的import\n */\n import?: ImportIR;\n /**\n * 声明的变量\n */\n declarations: string[];\n };\n\n/**\n * @deprecated\n * @param c\n * @returns\n */\nexport function getComponentName(c: GeneralComponentIR | ComponentInstanceIR): string {\n const name = isComponentInstanceIR(c) ? c.name : c.identifier;\n return kebab2Pascal(name);\n}\n\nfunction isComponentInstanceIR(\n x: GeneralComponentIR | ComponentInstanceIR\n): x is ComponentInstanceIR {\n return x.kind === 'component-instance';\n}\n\n/**\n * React 逻辑片段输出为JSX时可以控制的选项\n */\nexport type ToJSXOption = { rootAsFragment?: boolean; shallow?: boolean };\n\n/**\n * React 中子属性的属性名\n */\nexport const ReactChildrenPropName = 'children';\n\n/**\n * @internal\n */\ntype ValuePayload = {\n kind: 'string' | 'expr';\n payload: string;\n};\n\n/**\n * React 逻辑片段构造时可用的选项\n */\ntype ReactFragmentOption = Partial<Pick<ComponentInstanceIR, 'slot'>> & {\n /**\n * 混淆之后的名字\n *\n * 若不传此选项则不混淆名字\n */\n mangledName?: string;\n} & (\n | {\n kind?: 'view';\n }\n | {\n kind: 'biz-component';\n /**\n * 业务组件参数\n */\n params?: Param[];\n }\n );\n\n/**\n * 文件片段\n *\n * @public\n */\nexport interface FileFragment {\n /**\n * 将文件片段转换为代码\n *\n * @returns 代码字符串\n */\n toCode: () => {\n code: string;\n };\n /**\n * 获取Import\n *\n * @returns 此文件片段需要的所有Import\n */\n getImports: () => ImportIR[];\n}\n\n/**\n * React 组件片段的表示\n *\n * 描述了React组件的一个局部逻辑及其视图,包括:\n * - 逻辑:所依赖的import、所使用的Hooks、所包含的指令、所绑定的属性和事件等。\n * - 调用{@link bindAttr}、{@link bindEvent}等方法,可以往片段中绑定属性和事件处理器。\n * - 调用{@link bindDirective}等方法,可以设置显隐等。\n * - 视图:其标签名与JSX形式等。\n * - 调用{@link toJsx}方法,会根据内部维护的属性和指令将片段格式化为JSX。例如,如果设置了if指令,则会将`<Tag></Tag>`输出为`(flag ? <Tag></Tag> : undefined)`\n *\n * 通过组合多个组件片段表示,可以得到一个完整的组件。\n *\n * @public\n */\nexport class ReactFragment implements FileFragment {\n constructor(\n /**\n * 标签名\n */\n private name: string,\n /**\n * 依赖的 Import 列表\n */\n public imports: ImportIR[],\n /**\n * 此逻辑片段所依赖的 Hooks\n */\n public hooks: ReactHook[],\n /**\n * 子级逻辑片段\n */\n public children: ReactFragment[],\n /**\n * 状态上下文\n */\n private ctx: StateContextIR,\n private reactCodegenPlugin: ReactCodegenPlugin,\n /**\n * 其他控制选项\n */\n private options?: ReactFragmentOption\n ) {}\n private attrMap: Map<string, ValuePayload> = new Map();\n\n private directives: Map<BindDirectiveIR['kind'], BindDirectiveIR> = new Map();\n\n getImports() {\n return uniq(\n [\n ...this.imports,\n ...this.hooks.map((x) => {\n if (x.kind === 'free') {\n return x.import;\n } else {\n return {\n from: 'react',\n import: `{${x.kind}\\}`,\n };\n }\n }),\n {\n import: '{ observer, Observer }',\n from: 'mobx-react-lite',\n },\n {\n from: 'mobx',\n import: '{ toJS, autorun }',\n },\n ].filter(isNotNil)\n );\n }\n getHooks() {\n return this.hooks;\n }\n private getAttrMapStr(): string {\n const escapedKV: { key: string; value: string }[] = [];\n for (const [k, v] of this.attrMap) {\n if (k !== ReactChildrenPropName) {\n const getAttrValueStr = () => {\n if (v.kind === 'expr') {\n return `{${v.payload}\\}`;\n } else {\n const s = v.payload;\n if (s.includes(`\"`)) {\n return `{${JSON.stringify(s)}}`;\n }\n return `${JSON.stringify(s)}`;\n }\n };\n escapedKV.push({ key: trueKebab2Camel(k), value: getAttrValueStr() });\n }\n }\n\n return escapedKV\n .map(({ key, value }) => {\n return ` ${key}=${value}`;\n })\n .join('');\n }\n\n /**\n * 获取混淆之后的名字\n *\n * @returns 若没有指定混淆后的名字,则返回原名\n */\n getMangledName() {\n return this.options?.mangledName ?? this.name;\n }\n\n isIdeSlot() {\n return this.name === 'IdeSlot';\n }\n\n /**\n * 转换为JSX\n * @param option - 转JSX的选项\n * @returns JSX\n */\n toJsx(option?: ToJSXOption): JSXNode {\n const attrMapStr = this.getAttrMapStr();\n const tag = option?.rootAsFragment ? '' : this.name;\n const getBody = () => {\n const getChildrenStr = () => {\n const childrenInAttr = this.attrMap.get(ReactChildrenPropName);\n if (childrenInAttr) {\n if (childrenInAttr.kind === 'string') {\n return escapeTagInnerText(childrenInAttr.payload);\n }\n return `{${childrenInAttr.payload}}`;\n }\n const children = option?.shallow\n ? ''\n : this.children.map((x) => x.toJsx({ rootAsFragment: x.isIdeSlot() })).join('\\n') ?? '';\n return children;\n\n function escapeTagInnerText(text: string) {\n // replace { and } with {'{'} and {'}'}\n return escape(text).replace(/({|})/g, (match, p1) => {\n return `{'${p1}'}`;\n });\n }\n };\n const children = getChildrenStr();\n const bodyStr = getBodyStr();\n // 约定若param非空的时候,就渲染为()=>...的形式\n if (this.options?.slot) {\n const param = this.options?.slot.scope;\n if (this.options?.slot.target && !!param) {\n const wrapWithObserver = (x: string) => {\n return `<Observer>{()=>(${x})}</Observer>`;\n };\n // render as function\n // TODO wudengke 统一的 print 方法\n return { body: `(${param}: any) => ${wrapWithObserver(bodyStr)}` };\n }\n }\n return { body: bodyStr };\n function getBodyStr() {\n if (tag) {\n return `<${tag}${attrMapStr}>${children}</${tag}>`;\n } else {\n return `<>${children}</>`;\n }\n }\n };\n const { body } = getBody();\n const ifDirective = this.directives.get('if');\n if (ifDirective) {\n const expr = this.ctx.resolveExprToString(\n ifDirective.expression.expr,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx)\n );\n return `{(${expr}) ? (${body}) : undefined}`;\n }\n return body;\n }\n // TODO 后面移动到 mobx 插件的 makeLocalIndividualHooks 函数中来生成\n genUpdateParamsHooks() {\n if (this.options?.kind === 'biz-component') {\n const params = this.options.params ?? [];\n if (!params.length) return;\n this.hooks.push({\n kind: 'useEffect',\n body: `() => {\n ${params.map((item) => `localStore.${item.name} = props.${item.name}`).join(';\\n')}\n }`,\n deps: [\n {\n expr: new Identifier({ name: 'props' }),\n },\n ],\n });\n\n this.hooks.push({\n kind: 'useEffect',\n body: `() => {\n ${params\n .map(\n (item, i) =>\n `const disposer${i + 1} = autorun(()=>{\n props.${trueKebab2Camel(\n `on-${inferChangeEventNameFromAttrName(item.name)}`\n )}?.(localStore.${item.name});\n });`\n )\n .join(';\\n')}\n return ()=>{\n ${params.map((_, i) => `disposer${i + 1}();\\n`).join(';\\n')}\n }\n }`,\n deps: [],\n });\n }\n }\n\n /**\n * 转换为函数组件的变量声明\n * @returns 函数组件的变量声明\n */\n private toFunctionComponentVariable() {\n const name = this.getMangledName();\n const jsx = this.toJsx({\n // 将根替换为fragment\n rootAsFragment: true,\n });\n this.genUpdateParamsHooks();\n const serializeReactHook = (hook: ReactHook): string => {\n switch (hook.kind) {\n case 'useCallback': {\n let body = hook.body;\n return `const ${hook.declaration} = useCallback(${body}, [${hook.deps\n .map((item) =>\n this.ctx.resolveExprToString(\n item.expr,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx)\n )\n )\n .join(',')}])`;\n }\n case 'useState':\n return `const [${hook.declarations.join(',')}] = useState(${hook.initial})`;\n case 'useEffect':\n return `useEffect(${hook.body}, [${hook.deps\n .map((item) =>\n this.ctx.resolveExprToString(\n item.expr,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx)\n )\n )\n .join(',')}])`;\n case 'free':\n return `${hook.code}`;\n default:\n notImplemented(hook);\n }\n };\n const imports: ImportIR[] = uniq([...this.getImports()]).filter(isNotNil);\n if (this.options?.kind === 'biz-component') {\n const componentStr = `const ${name}: FC = observer(forwardRef((props, ref) => {\n ${this.hooks.map(serializeReactHook).join(';\\n')}\n return (${jsx});\n }));`;\n this.imports.push({\n from: 'react',\n import: '{ forwardRef }',\n });\n return { componentStr, imports };\n } else {\n const componentStr = `const ${name}: FC = observer(function ${name}(props, ref) {\n ${this.hooks.map(serializeReactHook).join(';\\n')}\n return (${jsx});\n }, {forwardRef: true});`;\n return { componentStr, imports };\n }\n }\n\n toCode() {\n const { componentStr, imports } = this.toFunctionComponentVariable();\n return { code: componentStr, imports };\n }\n\n /**\n * 从组件声明生成React逻辑片段\n * @param c - 组件声明\n * @returns 生成的React逻辑片段。至少生成一个逻辑片段\n */\n static fromComponentIR(\n c: GeneralComponentIR,\n reactCodegen: ReactCodegenPlugin,\n options?: { mangledName?: string }\n ): ReactFragment {\n const componentName = getComponentName(c);\n\n const children = c.elements.map((x) => reactCodegen.genReactFragment(x, c.stateContext));\n const ownHooks = reactCodegen.reactStateManager.produceHooks(c.stateContext);\n\n const mangledName = options?.mangledName ?? `__${componentName}`;\n\n if (c.kind === 'biz-component') {\n return new ReactFragment(\n componentName,\n [...children.flatMap((x) => x.getImports())],\n [...ownHooks, ...children.flatMap((x) => x.getHooks())],\n children,\n c.stateContext,\n reactCodegen,\n { mangledName, kind: c.kind, params: c.__raw.params }\n );\n }\n\n return new ReactFragment(\n componentName,\n [...children.flatMap((x) => x.getImports())],\n [...ownHooks, ...children.flatMap((x) => x.getHooks())],\n children,\n c.stateContext,\n reactCodegen,\n { mangledName }\n );\n }\n\n /**\n * 启发式地将大组件拆分为若干个小组件\n * @param c\n * @param reactCodegen\n * @returns\n */\n static fromComponentIRIntoHeuristicallySplitFragments(\n c: GeneralComponentIR,\n reactCodegen: ReactCodegenPlugin,\n options?: {\n enabled?: boolean;\n /**\n * 拆分大小\n */\n sizeThreshold?: number;\n }\n ): { main: ReactFragment; subs: ReactFragment[] } {\n const threshold = options?.sizeThreshold ?? 1;\n const sizeMap = new WeakMap<NodeIROfInterest, number>();\n\n type NodeIROfInterest = GeneralComponentIR | ComponentInstanceIR;\n function getChildren(node: NodeIROfInterest) {\n if ('elements' in node) {\n return node.elements;\n }\n const children = node.children;\n return children;\n }\n const sizing = (node: NodeIROfInterest | ComponentInstanceIR): number => {\n const value = sizeMap.get(node);\n if (isNotNil(value)) {\n return value;\n }\n let subTreeSize = 1;\n for (const child of getChildren(node)) {\n subTreeSize += sizing(child);\n }\n sizeMap.set(node, subTreeSize);\n return subTreeSize;\n };\n type ComponentInstanceIRAfterSplit = ComponentInstanceIR & { __split__: undefined };\n const subs: ComponentInstanceIR[] = [];\n const split = <T extends NodeIROfInterest>(node: T): { main: T } => {\n const children = getChildren(node);\n const { keepThisLevel, shouldSplit } = smartStrategy(node);\n function defaultStrategy(node: NodeIROfInterest) {\n // 什么都不做\n return {\n keepThisLevel: true,\n shouldSplit: false,\n };\n }\n function smartStrategy(node: NodeIROfInterest) {\n // 进行启发式拆分\n function shouldKeepThisLevel() {\n if (node.kind === 'component-instance') {\n // TODO 读取组件库定义的不可拆分的父子元素关系\n if (\n node.component.kind === 'library' &&\n [\n 'BrTable',\n 'Table',\n 'BrTabs',\n 'Tabs',\n 'Form',\n 'BrForm',\n 'BrFormItem',\n 'FormItem',\n ].includes(node.component.tag)\n ) {\n // 因为这些元素的直接节点不能进行拆分,需要拆分他们的子节点\n return true;\n }\n }\n return false;\n }\n\n function shouldSplit() {\n return sizing(node) >= threshold;\n }\n return { keepThisLevel: shouldKeepThisLevel(), shouldSplit: shouldSplit() };\n }\n if (shouldSplit) {\n const newChildren = children.map((child) => {\n const { main } = split(child);\n if (!keepThisLevel) {\n subs.push(child);\n const newMain = nodeToSplitComponentInstanceIR(main);\n return newMain;\n }\n return main;\n });\n if (isComponentInstanceIR(node)) {\n node.children = newChildren;\n } else {\n node.elements = newChildren;\n }\n }\n return { main: node };\n };\n let main = c;\n if (options?.enabled) {\n logger.info(`开始启发式拆分${c.kind}组件:${c.identifier}`);\n let result = split(c);\n main = result.main;\n logger.info(`得到${subs.length}个子组件`);\n }\n // 如果没有$refs或者localStore就补充\n const componentRefStates = main.stateContext.providedStates.filter(\n isLocalIndividualStateIRComponentRef\n );\n if (componentRefStates.length === 0) {\n // 若不存在Refs,则需要补充一个空的状态 const $refs = null;\n main.stateContext.provide({\n identifier: '$refs',\n kind: 'standalone',\n typeAnnotation: null,\n initialization: {\n kind: 'variable',\n left: '$refs',\n right: 'null',\n },\n });\n }\n return {\n // 将主组件命名为固定的\"MainComponent\"\n main: ReactFragment.fromComponentIR(main, reactCodegen, { mangledName: 'MainComponent' }),\n subs: subs.map((sub) => {\n return ReactFragment.fromComponentIR(\n nodeToSplitComponentIR(sub, c.stateContext),\n reactCodegen\n );\n }),\n };\n\n function deriveContextForSubComponent(ctx: StateContextIR) {\n // 提供 $refs和localStore两个变量\n return StateContextIR.fromParent(ctx)\n .provide({\n /**\n * const $refs = ref;\n */\n identifier: '$refs',\n kind: 'standalone',\n typeAnnotation: null,\n initialization: {\n kind: 'variable',\n left: '$refs',\n right: 'ref',\n },\n })\n .provide({\n /**\n * const localStore = props.localStore;\n */\n identifier: 'localStore',\n kind: 'standalone',\n typeAnnotation: null,\n initialization: {\n kind: 'variable',\n left: 'localStore',\n right: 'props.localStore',\n },\n });\n }\n function nodeToSplitComponentIR(\n originalComponentInstanceIR: ComponentInstanceIR,\n ctx: StateContextIR\n ): ViewComponentIR {\n const stateContext = deriveContextForSubComponent(ctx);\n return {\n kind: 'view',\n __raw:\n // @ts-expect-error\n null as View,\n childComponents: [],\n elements: [originalComponentInstanceIR],\n identifier: originalComponentInstanceIR.name,\n stateContext,\n };\n }\n\n function nodeToSplitComponentInstanceIR(node: NodeIROfInterest): ComponentInstanceIRAfterSplit {\n if (isComponentInstanceIR(node)) {\n // 页面元素变成指向抽成组件的页面元素\n // 去掉上面所有的属性,并加上: localStore 和 $refs\n return {\n __split__: undefined,\n name: node.name,\n kind: 'component-instance',\n attrs: [\n {\n kind: 'expr',\n // @ts-expect-error\n __raw: { type: 'dynamic', name: 'localStore', concept: 'BindAttribute' },\n expression: {\n expr: new Identifier({ name: 'localStore' }),\n },\n name: 'localStore',\n sync: false,\n concept: 'BindAttribute',\n },\n {\n kind: 'expr',\n // @ts-expect-error\n __raw: { type: 'dynamic', name: 'ref', concept: 'BindAttribute' },\n expression: {\n expr: new Identifier({ name: '$refs' }),\n },\n name: 'ref',\n sync: false,\n concept: 'BindAttribute',\n },\n ],\n children: [],\n component: createReferencedForSubComponent(node),\n directives: [],\n events: [],\n slot: { target: undefined, scope: undefined },\n };\n } else {\n notImplemented('nodeToSplitComponentInstanceIR中输入非ComponentInstanceIR的情形');\n }\n function createReferencedForSubComponent(sub: ComponentInstanceIR): ReferencedComponent {\n const componentName = `__${getComponentName(sub)}`;\n return {\n kind: 'sub-component',\n tag: componentName,\n };\n }\n }\n }\n\n /**\n * 绑定事件\n * @param b - 绑定事件的IR\n */\n bindEvent(b: BindEventIR, options?: { handlerPrefix: string }): void {\n // 约定:React组件的dataSource没有on-前缀\n // FIXME wudengke 确认这里的写法\n const attrPrefix = options?.handlerPrefix ?? b.__raw.name === 'dataSource' ? '' : 'on-';\n /**\n * @example change\n */\n const targetAttr = b.__raw.name;\n /**\n * @example on-change\n */\n const finalAttrName = `${attrPrefix}${targetAttr}`;\n const resolver = this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx);\n const storeHandlerName = resolver.resolveIdentifier(new Identifier({ name: b.handlerName }));\n if (!storeHandlerName) {\n throw new Error('cannot find event handler');\n }\n const params = b.params;\n const eventParam = params.at(0);\n if (params.length > 1 && eventParam) {\n const args = params.map((x) => x.name).join(',');\n this.attrMap.set(finalAttrName, {\n kind: 'expr',\n payload: `(${eventParam.name}) => ${storeHandlerName}(${args})`,\n });\n } else {\n this.attrMap.set(finalAttrName, {\n kind: 'expr',\n payload: storeHandlerName,\n });\n }\n }\n\n /**\n * 将属性存入当前片段的attrMap\n *\n * @param b - 绑定属性的IR\n */\n bindAttr(b: BindAttributeIR) {\n // TODO wudengke 去掉对.__raw的直接使用\n switch (b.kind) {\n case 'expr': {\n if (b.__raw.type === 'string') {\n this.attrMap.set(b.__raw.name, {\n kind: 'string',\n payload: String(b.__raw.value),\n });\n } else if (b.__raw.type === 'dynamic') {\n if (b.expression.expr) {\n const newBind = reactComponentLibHackPlugin.functions.hackBindAttribute(b);\n const payload = this.ctx.resolveExprToString(\n newBind.expression.expr,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx)\n );\n this.attrMap.set(b.__raw.name, {\n kind: 'expr',\n payload,\n });\n } else {\n const errorMsg = `${b.__raw.nodePath}@${b.__raw.concept} 的expression 为空`;\n logger.debug(errorMsg);\n return;\n }\n } else if (b.__raw.type === 'static') {\n // static的children按照字符串展示\n if (b.__raw.name === 'children') {\n this.attrMap.set(b.__raw.name, {\n kind: 'string',\n payload: String(b.__raw.value),\n });\n return;\n }\n if (isNotEmptyString(b.__raw.value as string)) {\n this.attrMap.set(b.__raw.name, {\n kind: 'expr',\n payload: String(b.__raw.value),\n });\n }\n }\n return;\n }\n case 'render': {\n const frag = this.reactCodegenPlugin.genReactFragment(b.component, this.ctx);\n const payload = frag.toJsx();\n this.imports.push(...frag.getImports());\n this.attrMap.set(b.name, {\n kind: 'expr',\n payload,\n });\n return;\n }\n case 'validation-rules': {\n const ruleStrs = b.rules.map((r) => {\n return this.ctx.resolveExprToString(\n r,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(this.ctx)\n );\n });\n this.attrMap.set(b.name, {\n kind: 'expr',\n payload: `[${ruleStrs.join(', ')}]`,\n });\n return;\n }\n default: {\n assertNever(b);\n }\n }\n }\n\n /**\n * 设置绑定样式和静态样式\n * @param styles - 需绑定样式节点列表\n * @param staticStyle - 静态样式字符串\n * @returns\n */\n setStyleAndStaticStyle(styles: BindStyle[], staticStyle: string) {\n if (styles.length === 0 && !staticStyle) {\n return;\n }\n // 要求:BindStyle的优先级比手动指定的StaticStyle高\n const staticStyleObject = styleStringToInlineObject(staticStyle);\n styles.forEach((b) => {\n if (!b.name) {\n throw new Error(b.nodePath);\n }\n if (b.expression) {\n staticStyleObject[b.name] = b;\n if (!isBindStyle(b)) {\n throw new Error(`${b} is not bindStyle`);\n }\n }\n });\n const that = this;\n\n function cssPropertyNameToReactStyleObjectKey(cssProperty: string) {\n return cssProperty.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());\n }\n\n type KeyValuePayload = ValuePayload & { key: string };\n const property = Object.entries(staticStyleObject)\n .map(([key, v]): KeyValuePayload | undefined => {\n if (isObject(v) && isBindStyle(v)) {\n const reactObjectKey = cssPropertyNameToReactStyleObjectKey(key);\n const value = that.ctx.resolveExprToString(\n v.expression!,\n this.reactCodegenPlugin.javaScriptCodegen,\n this.reactCodegenPlugin.reactStateManager.withCtx(that.ctx)\n );\n // TODO wudengke Vue使用的是endsWith\n if (reactObjectKey === 'backgroundImage') {\n return { kind: 'expr', payload: `\\`url(\\${${value}})\\``, key: reactObjectKey };\n }\n return { kind: 'expr', payload: value, key: reactObjectKey };\n } else if (isString(v)) {\n return { kind: 'string', payload: v, key: key };\n }\n return undefined;\n })\n .filter(isNotNil);\n function formatValuePayloadAsObjectStr(properties: KeyValuePayload[]): ValuePayload {\n const body = properties\n .map((x) => {\n let value = getValue();\n return `${JSON.stringify(x.key)}: ${value}`;\n function getValue() {\n if (x.kind === 'expr') {\n return x.payload;\n } else {\n return `${JSON.stringify(x.payload)}`;\n }\n }\n })\n .join(',\\n');\n return { kind: 'expr', payload: `{${body}}` };\n }\n\n this.attrMap.set('style', formatValuePayloadAsObjectStr(property));\n }\n\n /**\n * 绑定指令\n * @param b - 绑定指令的IR\n */\n bindDirective(b: BindDirectiveIR) {\n this.directives.set(b.kind, b);\n }\n}\n\ntype ImportFromRepr = string;\ntype ImportWhatRepr = string;\nexport type ImportIR =\n | {\n from: ImportFromRepr;\n import: ImportWhatRepr;\n lazy?: boolean;\n }\n | {\n from: ImportFromRepr;\n import?: undefined;\n };\n\n/**\n * 导出语句\n *\n * @internal\n */\ntype ExportStatement = string;\n\n/**\n * ImportIR的Resolve函数\n *\n * 将一个ImportIR解析为具体的Import语句\n */\nexport type ImportIRResolver = (importIR: ImportIR) => string;\n\nexport class ReactFileDescription {\n constructor(\n public fileName: string,\n public imports: ImportIR[],\n private body: FileFragment[],\n private exports: ExportStatement[],\n public folder?: FolderPath\n ) {}\n get fileNameWithExt(): string {\n return this.fileName.includes('.') ? this.fileName : `${this.fileName}.tsx`;\n }\n\n getFolderPath(): string | undefined {\n if (this.folder) {\n return folderPathToString(this.folder);\n }\n return undefined;\n }\n getImports(): ImportIR[] {\n return [...this.imports, ...this.body.flatMap((x) => x.getImports())].filter(isNotNil);\n }\n\n /**\n * 将文件描述序列化为字符串\n * @param importResolver - import 解析函数\n * @returns 序列化后的字符串\n */\n async serialize(importResolver: ImportIRResolver): Promise<string> {\n const exports = this.exports;\n const components = this.body.map((x) => {\n return x.toCode();\n });\n const imports: ImportIR[] = this.getImports();\n const resolvedImports = imports.map(importResolver);\n const parts = [\n uniq(resolvedImports).join('\\n'),\n components.map((x) => x.code).join('\\n'),\n uniq(exports).join('\\n'),\n ];\n const str = parts.join('\\n');\n const formatted = await codeFormatPlugin.functions.format(str, this.fileNameWithExt);\n if (this.fileNameWithExt.endsWith('.tsx')) {\n return `//@ts-nocheck\\n${formatted}`;\n }\n return formatted;\n }\n /**\n * 将另外一个文件描述合并到当前文件描述(修改当前文件描述)\n * @param other - 另一个文件描述\n * @returns 合并后的当前文件描述\n */\n merge(other: ReactFileDescription | undefined): this {\n if (!other) {\n return this;\n }\n this.imports.push(...other.imports);\n this.body.push(...other.body);\n this.exports.push(...other.exports);\n return this;\n }\n static empty(name?: string) {\n return new ReactFileDescription(name ?? 'NoName', [], [], []);\n }\n}\n\nexport const FileDescription = ReactFileDescription;\n\n/**\n * 根据组件调用计算组件标签名\n * @param c - 组件调用\n * @returns 组件标签名\n *\n * @internal\n */\nfunction getReactComponentName(c: ComponentInstanceIR) {\n if (isComponentFromLib(c.component)) {\n if (c.component.tag === 'template') {\n return '';\n }\n }\n return c.component.tag;\n}\n\n/**\n * 组件声明到文件路径的映射字典\n */\nexport type ComponentIRToPathDict = WeakMap<GeneralComponentIR, string>;\n\n/**\n * React 代码生成插件\n */\n@injectable()\nexport class ReactCodegenPlugin\n implements JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactCodegen\n{\n constructor(\n @inject(ServiceMetaKind.ReactJavaScriptCodePrinter)\n public javaScriptCodegen: JavaScriptDomain.JavaScriptCodegen,\n @inject(ServiceMetaKind.ReactStateManager)\n public reactStateManager: JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactStateManager,\n @inject(ServiceMetaKind.FrontendPerformance)\n public frontendPerformance: JavaScriptDomain.FrontendApplicationDomain.FrontendPerformance,\n @inject(ServiceMetaKind.ProjectOrganizer)\n private projectOrganizer: GeneratorInfrastructureDomain.ProjectOrganizer,\n @inject(ServiceMetaKind.EntryPointManager)\n private entrypointManager: JavaScriptDomain.FrontendApplicationDomain.EntrypointManager,\n @multiInject(ServiceMetaKind.ReactHookProvider)\n @optional()\n private reactHookProviders?: JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactHookProvider[]\n ) {}\n\n genReactFragment(c: ComponentInstanceIR, ctx: StateContextIR): ReactFragment {\n const imports: ImportIR[] = [\n {\n from: 'react',\n import: 'React',\n },\n {\n from: 'react',\n import: '{type FC}',\n },\n ];\n const hooks: ReactHook[] = [];\n const childrenFrags = c.children.map((x) => {\n return this.genReactFragment(x, ctx);\n });\n childrenFrags.forEach((c) => {\n hooks.push(...c.getHooks());\n imports.push(...c.getImports());\n });\n const componentName = getReactComponentName(c);\n const frag = new ReactFragment(componentName, imports, hooks, childrenFrags, ctx, this, {\n slot: c.slot,\n });\n const possibleIr = createImportIrFromReferencedComponent(c.component);\n if (possibleIr) {\n imports.push(possibleIr);\n }\n if (c.__raw) {\n frag.setStyleAndStaticStyle(c.__raw.bindStyles ?? [], c.__raw.staticStyle ?? '');\n }\n for (const b of c.events) {\n frag.bindEvent(b);\n }\n for (const b of c.attrs) {\n frag.bindAttr(b);\n }\n for (const b of c.directives) {\n frag.bindDirective(b);\n }\n return frag;\n }\n /**\n * 根据组件声明信息和文件夹信息生成React组件\n * @param c - 组件声明信息\n * @param folder - 文件夹信息\n * @returns 生成的多个React文件\n */\n genReactComponent(\n c: GeneralComponentIR,\n folder?: FolderPath,\n irConfig?: NASLAppIR['configs']\n ): ReactFileDescription[] {\n const { main, subs } = ReactFragment.fromComponentIRIntoHeuristicallySplitFragments(\n c,\n this,\n irConfig?.config?.extensionConfigMap?.heuristicalSplit\n );\n const components = [...subs, main];\n const imports = components.flatMap((x) => x.getImports()).filter(isNotNil);\n const componentName = getComponentName(c);\n const reactFile = new ReactFileDescription(\n componentName,\n uniq(imports),\n components,\n [`export default ${main.getMangledName()}`],\n folder\n );\n return [reactFile];\n }\n /**\n * 递归生成React组件的文件\n * @param c - 组件声明\n * @param dict - 组件声明到文件路径的映射字典\n * @param folder - 此文件所属的父文件夹\n * @returns 生成的React文件描述列表\n */\n recursivelyGenReactComponent(\n c: GeneralComponentIR,\n dict: ComponentIRToPathDict,\n folder?: FolderPath,\n irConfig?: NASLAppIR['configs']\n ): ReactFileDescription[] {\n dict.set(c, folder ? folderPathToString(folder) : '/');\n return flatten([\n this.genReactComponent(c, folder, irConfig),\n c.kind === 'view'\n ? c.childComponents.flatMap((child) => {\n return this.recursivelyGenReactComponent(\n child,\n dict,\n [...(folder ?? []), { name: c.identifier }],\n irConfig\n );\n })\n : [],\n ]);\n }\n buildRoutes(views: ViewComponentIR[], componentIRToPathDict: ComponentIRToPathDict, basePath: string) {\n const self = {\n ...routesExtractionPlugin.functions,\n ...reactRouterPlugin.functions,\n };\n const { routes: routeIRs } = self.extractRoute(views, basePath, {\n lazy: this.frontendPerformance?.performanceOptions?.lazy ?? true,\n frameworkKind: 'react',\n });\n const { code, imports } = self.routeToCode(routeIRs, componentIRToPathDict, basePath);\n return new ReactFileDescription('Router', [...imports], [], [code]);\n }\n /**\n * 构建平台配置文件\n * @param ir - NASL应用中间表示\n * @returns 平台配置文件描述\n */\n buildPlatformConfig(ir: NASLAppIR) {\n const self = {\n ...routesExtractionPlugin.functions,\n };\n\n const basePath = ir.configs.basePlatformConfig.basePath + '/';\n const { authResourcePaths, baseResourcePaths } = self.extractRoute(ir.views, basePath, {\n lazy: false,\n frameworkKind: 'react',\n });\n const platformConfig: PlatformConfig = {\n ...ir.configs.basePlatformConfig,\n authResourcePaths,\n baseResourcePaths,\n };\n return new ReactFileDescription(\n 'platform.config.ts',\n [],\n [],\n [`export default ${jsonStringifyKeepUndefined(platformConfig)}`]\n );\n }\n buildInit(ir: NASLAppIR): ReactFileDescription {\n const documentIcon = ir.configs.document.icon;\n const documentIconSetterCode = documentIcon\n ? `\n {\n const link = document.createElement('link');\n link.rel = 'shortcut icon';\n link.href = \\`${ir.configs.document.icon}\\`;\n document.head.appendChild(link);\n }\n `\n : '';\n return new ReactFileDescription(\n 'init.ts',\n [\n {\n from: 'i18next',\n import: 'i18n',\n },\n {\n from: './index.css',\n },\n {\n from: './platform.config',\n import: 'platformConfig',\n },\n ],\n [],\n [\n `\n function init(){\n const appInfo = platformConfig.appConfig;\n Object.assign(appInfo, platformConfig);\n ${documentIconSetterCode}\n\n // 国际化\n let locale = 'zh-CN';\n if (appInfo.i18nInfo) {\n const { I18nList, messages } = appInfo.i18nInfo;\n locale = getUserLanguage(appInfo, messages);\n // 重置当前生效语言\n appInfo.i18nInfo.locale = locale;\n appInfo.i18nInfo.currentLocale = locale;\n // 设置当前语言名称\n appInfo.i18nInfo.localeName = I18nList?.find((item) => item.id === locale)?.name;\n }\n const i18nInfo = appInfo.i18nInfo;\n i18n\n .init({\n // 设置语言资源,可以根据需要引入其他语言文件\n resources: Object.keys(i18nInfo.messages).reduce((acc, key) => {\n acc[key] = {\n translation: i18nInfo.messages[key]\n };\n return acc;\n }, {}),\n lng: locale, // 默认语言\n fallbackLng: 'zh-CN', // 如果当前语言没有对应的翻译,将使用该语言作为备用\n interpolation: {\n escapeValue: false, // 不要对翻译的文本进行转义,以支持 HTML 标签\n },\n });\n window.$i18n = i18n;\n window.appInfo = appInfo;\n\n function getUserLanguage(appInfo, messages = {}) {\n let locale = localStorage.i18nLocale;\n // 如果local里没有就读主应用的默认语言\n if (!messages[locale]) {\n // 如果当前浏览器的设置也没有,就读取主应用的默认语言\n locale = navigator.language || navigator.userLanguage;\n\n if (!messages[locale]) {\n // 如果不在列表中,获取语言代码的前两位\n let baseLang = locale.substring(0, 2);\n const languageList = Object.keys(messages);\n // 查找列表中是否有与基础语言代码相同的项\n let match = languageList.find((lang) => lang.startsWith(baseLang));\n // 如果存在前两位一样的就用这个\n if (match) {\n locale = match;\n } else {\n // 如果不存在,就用默认语言\n locale = appInfo.i18nInfo.locale || 'zh-CN';\n }\n }\n }\n return locale;\n }\n }\n init();\n `,\n ]\n );\n }\n async buildMasterCss(themeCSS: string, packages: NASLAppIR['packages']) {\n const logger = Logger('buildMasterCss');\n logger.info(packages);\n const imports = packages.map((x) => {\n if (x.kind === 'standard') {\n return `@import './packages/${x.name}@${x.version}/dist-theme/index.css';`;\n }\n // TODO wudengke 可能并没有index.css,需要根据manifest确认\n return `@import './packages/extension/${x.name}@${x.version}/dist-theme/index.css';`;\n });\n return new ReactFileDescription('index.css', [], [], [...imports, themeCSS]);\n }\n /**\n * 构建前端全局变量文件\n * @param variables - 全局变量表示的列表\n * @param baseCtx - 状态上下文\n * @returns React文件描述\n */\n async buildGlobalFrontendVariableFile(\n variables: NASLAppIR['configs']['globalVariables'],\n baseCtx: StateContextIR\n ) {\n const classBodyStr = variables\n .map((v) => {\n const getInitExpr = (): string | undefined => {\n const defaultValueStr = v.defaultValue?.expression\n ? baseCtx.resolveExprToString(\n v.defaultValue.expression,\n this.javaScriptCodegen,\n this.reactStateManager.withCtx(baseCtx)\n )\n : undefined;\n if (v.localCache) {\n const initExpr = `loadFromLocalStorage(${key})`;\n if (defaultValueStr) {\n return `${initExpr} ?? ${defaultValueStr}`;\n }\n return initExpr;\n } else {\n if (defaultValueStr) {\n return defaultValueStr;\n }\n }\n return undefined;\n };\n const key = `${JSON.stringify(v.name)}`;\n const initExpr = getInitExpr();\n if (initExpr) {\n return `${v.name} = ${initExpr};`;\n } else {\n return `${v.name}: any;`;\n }\n })\n .join('\\n');\n const persistentKeysStr = JSON.stringify(\n variables.filter((x) => x.localCache).map((x) => x.name)\n );\n return new ReactFileDescription(\n 'global-variables.tsx',\n [\n { from: 'mobx', import: '{makeAutoObservable, observe}' },\n {\n from: './Hooks',\n import: '{genInitFromSchema, nasl}',\n },\n ],\n [],\n [\n `\n const loadFromLocalStorage = (key: string)=> {\n const value = globalThis.localStorage[key];\n try {\n return JSON.parse(value);\n } catch (error) {\n return undefined;\n }\n };\n const saveToLocalStorage = (key: string, value: unknown)=>{\n try {\n const str = JSON.stringify(value);\n localStorage[key] = str;\n } catch (error) {\n console.error('An error occurred:', error);\n }\n }\n `,\n `\n class GlobalVariables {\n ${classBodyStr}\n constructor() {\n makeAutoObservable(this);\n }\n }\n export const globalVariables = new GlobalVariables();\n export const useFrontendVariables = () => globalVariables;\n `,\n `\n const persistentKeys = ${persistentKeysStr};\n const disposer = observe(globalVariables, change => {\n const key = change.name;\n if(persistentKeys.includes(key)){\n const value = change.object[change.name];\n saveToLocalStorage(key, value);\n }\n });\n `,\n ]\n );\n }\n buildLibraryHook(packages: NASLAppIR['packages']) {\n const exts = packages.filter((x) => x.kind === 'extension');\n const imports: ImportIR[] = exts\n .map((ext) => {\n return {\n from: `@extension/${ext.name}`,\n import: `* as ${kebab2Pascal(ext.name)}`,\n };\n })\n .filter(isNotNil);\n return new ReactFileDescription(\n '',\n [...imports],\n [],\n [\n `export const useLibrary = ()=>{\n return {\n ${exts.map((ext) => {\n return `${ext.name}: ${kebab2Pascal(ext.name)}`;\n })}\n };\n }`,\n ]\n );\n }\n\n buildEntryFiles(ir: NASLAppIR) {\n const code = this.entrypointManager.generateEntry(ir);\n return code;\n }\n\n /**\n * 生成布局后的React源代码文件\n * @param ir - NASL应用中间表示\n * @param baseDir - 基目录\n * @returns 组织后的文件列表\n */\n async genFiles(ir: NASLAppIR, baseDir: string): Promise<OrganizedFile[]> {\n const utilHooks = ReactFileDescription.empty('Hooks')\n .merge(new ReactFileDescription('', [{ from: './init' }], [], []))\n .merge(reactRouterPlugin.functions.__hooksDefinitions())\n .merge(apiClientPlugin.functions.__hooksDefinitions())\n .merge(reactComponentLibHackPlugin.functions.__hooksDefinitions())\n .merge(i18nPlugin.functions.__hooksDefinitions())\n .merge(this.buildLibraryHook(ir.packages))\n .merge(new ReactFileDescription('', [], [], [`export {nasl, genInitFromSchema};`]));\n\n this.reactHookProviders?.forEach((reactHookProvider) => {\n utilHooks.merge(reactHookProvider.genHookDefinition());\n });\n const apiClientFile = apiClientPlugin.functions.buildApiStubFile(ir.apis, ir.configs.metaData);\n const componentIRToPathDict: ComponentIRToPathDict = new WeakMap();\n const views = ir.views.flatMap((x) =>\n this.recursivelyGenReactComponent(x, componentIRToPathDict, undefined, ir.configs)\n );\n const bizComponents = ir.bizComponents.flatMap((x) =>\n this.recursivelyGenReactComponent(x, componentIRToPathDict, undefined, ir.configs)\n );\n const basePath = ir.configs.basePlatformConfig.basePath + '/';\n const routes = this.buildRoutes(ir.views, componentIRToPathDict, basePath);\n const masterCss = await this.buildMasterCss(ir.configs.themeCSS, ir.packages);\n const globalVariables = await this.buildGlobalFrontendVariableFile(\n ir.configs.globalVariables,\n ir.baseCtx\n );\n\n const files = await this.projectOrganizer.organize({\n baseDir,\n project: {\n entry: this.buildEntryFiles(ir),\n api: apiClientFile,\n utils: utilHooks,\n routes,\n views,\n bizComponents,\n platformConfig: this.buildPlatformConfig(ir),\n init: this.buildInit(ir),\n masterCss,\n globalVariables,\n },\n });\n return files;\n }\n}\n\nfunction createImportIrFromReferencedComponent(c: ReferencedComponent): ImportIR | undefined {\n switch (c.kind) {\n case 'library': {\n return {\n from: `${c.libraryName}`,\n import: `{${c.tag}}`,\n };\n }\n case 'biz-component': {\n return {\n from: `${c.libraryName}`,\n import: `${c.tag}`,\n };\n }\n case 'sub-component': {\n // 子组件 目前只能从文件内引用\n return undefined;\n }\n default: {\n assertNever(c);\n }\n }\n}\n","// TODO 或许我们可以使用JSON5\nconst SomethingYouNeverGuessAsUndefinedPlaceholder = '__SomethingYouNeverGuessAsUndefinedPlaceholder__undefined__';\nexport function jsonStringifyKeepUndefined(obj: any) {\n return JSON.stringify(\n obj,\n (_k, v) => {\n return v === undefined ? SomethingYouNeverGuessAsUndefinedPlaceholder : v;\n },\n 2\n ).replaceAll(`\"${SomethingYouNeverGuessAsUndefinedPlaceholder}\"`, 'undefined');\n}\n","import { extname } from 'path';\n\nexport function hasExtension(filePath: string): boolean {\n const extension = extname(filePath);\n return extension !== '';\n}\n\nexport type Folder = {\n name: string;\n};\n\nexport type FolderPath = [Folder] | [Folder, ...Folder[]];\n\nexport function folderPathToString(folderTree: FolderPath): string {\n let root = '/';\n return root + folderTree.map((x) => x.name).join('/');\n}\n","import { LegacyMetaData, LogicIR } from '../types/ir';\nimport { makePlugin } from '../utils/plugin';\nimport { ReactFileDescription } from './react/react-codegen-plugin';\n\ntype ServiceConfig = {\n config: {\n serviceType: string;\n };\n url: {\n method: string;\n path: string;\n };\n};\n\nexport const apiClientPlugin = makePlugin({\n name: 'apiClientPlugin',\n functions: {\n buildApiStubFile(logics: LogicIR[], metaData: LegacyMetaData): ReactFileDescription {\n function apiSignaturesToServiceConfigMap(logics: LogicIR[]): Record<string, ServiceConfig> {\n const entries = logics.map((logic) => {\n return [logic.logic.name, logic.logic.toService()];\n });\n return Object.fromEntries(entries);\n }\n const logicsMap = Object.assign({}, metaData.logicsMap, apiSignaturesToServiceConfigMap(logics));\n return new ReactFileDescription(\n 'apis',\n [\n {\n from: '@lcap/basic-template',\n import: '{initLogic, initDataTypes, initService, initProcess, Global}',\n },\n ],\n [],\n [\n `export { genInitFromSchema } from '@lcap/basic-template';`,\n `export const dataTypesMap = ${JSON.stringify(metaData.dataTypesMap)};`,\n `export const enumsMap = ${JSON.stringify(metaData.enumsMap)};`,\n `export const servicesMap = ${JSON.stringify(metaData.servicesMap)};`,\n `const logicsMap = ${JSON.stringify(logicsMap)};`,\n `\n const {$global} = initDataTypes({dataTypesMap, i18nInfo: window.appInfo.i18nInfo});\n export const dataTypesGlobal = $global;\n window.$isInstanceOf = Global.prototype.$isInstanceOf;\n window.$isLooseEqualFn = Global.prototype.$isLooseEqualFn;\n window.$resolveRequestData = Global.prototype.$resolveRequestData;\n const { logics } = initLogic({logicsMap} as any);\n export const apiClient = logics;\n export const {services} = initService({servicesMap});\n initProcess();\n window.$processV2 = Global.prototype.$processV2;\n window.$systemProcessV2 = Global.prototype.$systemProcessV2;\n `,\n ]\n );\n },\n __hooksDefinitions(): ReactFileDescription {\n return new ReactFileDescription(\n 'ApiClientHooks',\n [\n {\n from: 'mobx',\n import: '{ makeAutoObservable, isObservable, observable }',\n },\n {\n from: '@lcap/basic-template',\n import: '{ isCreatedByGenInitFromSchema }',\n },\n {\n from: '/src/apis',\n import: '{ genInitFromSchema as baseGenInitFromSchema }',\n },\n {\n from: '/src/apis',\n import: '{ services }',\n },\n {\n from: 'lodash',\n import: '{cloneDeep}',\n },\n ],\n [],\n [\n `\nfunction deep(obj){\n if (isObservable(obj)) {\n return obj;\n }\n if (obj instanceof Array) {\n const newObj = obj.map(deep);\n return observable(newObj);\n } else if (isCreatedByGenInitFromSchema(obj)) {\n const newObj = Object.create(obj.__proto__);\n for (const key of Object.keys(obj)) {\n newObj[key] = deep(obj[key]);\n }\n return makeAutoObservable(newObj);\n } else if(obj instanceof Object){\n return makeAutoObservable(obj);\n }\n return obj;\n}\n\nexport const useGenInitFromSchema = (): typeof baseGenInitFromSchema => {\n return (...args) => {\n const obj = baseGenInitFromSchema(...args);\n return deep(obj);\n };\n};\nconst genInitFromSchema = useGenInitFromSchema();\n`,\n `\n export const useServices = ()=>{\n return services;\n }\n `,\n ]\n );\n },\n },\n});\n","import * as postcss from 'postcss';\nimport { makePlugin } from '../../utils/plugin';\n//@ts-expect-error 无类型定义\nimport postcssJs from 'postcss-js';\n\nexport type JSXNode = string;\ntype JSXRepr = string;\n\nexport function styleStringToInlineObject(staticStyle: string): Record<string, unknown> {\n try {\n const root = postcss.parse(staticStyle);\n return postcssJs.objectify(root);\n } catch (error) {\n return {};\n }\n}\n\nexport const jsxCodeGenPlugin = makePlugin({\n name: 'JsxCodeGen',\n functions: {\n printTag(tagName: string): JSXRepr {\n return `<${tagName} />`;\n },\n },\n});\n","import { format } from 'prettier/standalone';\nimport { makePlugin } from '../../utils/plugin';\n// @ts-ignore 没有类型定义\nimport parserTypeScript from 'prettier/parser-typescript';\nimport parserBabel from 'prettier/parser-babel';\nimport parserHtml from 'prettier/parser-html';\nimport { Logger } from '../../utils/logger';\n\nexport type PrettierOptions = NonNullable<Parameters<typeof format>[1]>;\n\nconst PrettierCommonOptions: PrettierOptions = {\n tabWidth: 2,\n printWidth: 150,\n singleQuote: true,\n trailingComma: 'es5',\n};\n\nconst PrettierDefaultOptions: PrettierOptions = {\n ...PrettierCommonOptions,\n plugins: [parserTypeScript],\n parser: 'typescript',\n};\n\nconst PrettierVueOptions: PrettierOptions = {\n ...PrettierCommonOptions,\n plugins: [parserHtml, parserBabel, parserTypeScript],\n parser: 'vue',\n};\n\nconst logger = Logger('codeFormatPlugin');\n\nexport const codeFormatPlugin = makePlugin({\n name: 'CodeFormatPlugin',\n functions: {\n async format(str: string, fileNameWithExt: string, options?: PrettierOptions): Promise<string> {\n function prettierFormat() {\n try {\n return format(str, {\n ...(fileNameWithExt.endsWith('.vue') ? PrettierVueOptions : PrettierDefaultOptions),\n ...options,\n });\n } catch (error) {\n logger.debug(error, 'format出错');\n return str;\n }\n }\n const res = await prettierFormat();\n return res;\n },\n },\n});\n","import { Container, injectable } from 'inversify';\nimport { ViewComponentIR } from '../../types/ir';\nimport { makePlugin } from '../../utils/plugin';\nimport { isNotNil } from '../../utils/types';\n\nexport type RouteIR =\n | {\n accumulativePath: string;\n thisLevelPath: string;\n elementMangledName?: string;\n elementTemplate: ViewComponentIR;\n children?: RouteIR[];\n authConfig?: AuthConfig;\n kind: 'normal';\n lazy?: boolean;\n meta: {\n title: string;\n crumb: string;\n };\n }\n | { accumulativePath: string; thisLevelPath: string; redirect: string; kind: 'redirect' };\n// TBD\ntype AuthConfig = unknown;\n\nconst notFoundPageKeyword = 'notFound';\nexport const routesExtractionPlugin = makePlugin({\n name: 'RoutesExtraction',\n functions: {\n extractRoute(\n components: ViewComponentIR[],\n routePrefix: string,\n options?: { lazy?: boolean; frameworkKind?: 'react' | 'vue2' | 'vue3' }\n ): { routes: RouteIR[]; authResourcePaths: string[]; baseResourcePaths: string[] } {\n const extractRouteHelper = (\n components: ViewComponentIR[],\n routePrefix: string\n ): RouteIR[] => {\n // 递归页面路由规则。对所有页面,都添加对应路由。子页面的路由应该将父路由路径作为前缀。\n return components.flatMap((c): RouteIR[] => {\n const path = `${routePrefix}${c.identifier}`;\n const route: RouteIR = {\n accumulativePath: path,\n thisLevelPath: `${c.identifier}`,\n children: extractRouteHelper(c.childComponents, `${path}/`),\n elementTemplate: c,\n kind: 'normal',\n lazy: !!options?.lazy,\n meta: {\n title: c.__raw.title ?? '',\n crumb: c.__raw.crumb?.value ?? '',\n },\n };\n // 默认跳转页规则。对标记为\"默认跳转页\"(即isIndex为true)的非顶级页面,在其父路由中添加到它的重定向。\n const redirectsForIndex = route.children\n ?.map((child): RouteIR | undefined => {\n if (child.kind === 'normal') {\n if (child.elementTemplate.__raw.isIndex) {\n return {\n accumulativePath: `${path}/`,\n thisLevelPath: ``,\n redirect: `${child.elementTemplate.identifier}`,\n kind: 'redirect',\n };\n }\n }\n return undefined;\n })\n .filter(isNotNil);\n if (redirectsForIndex?.length) {\n route.children?.push(...redirectsForIndex);\n }\n return [route];\n });\n };\n\n const routes: RouteIR[] = extractRouteHelper(components, routePrefix);\n\n // if (routePrefix !== '/') {\n // // 路由前缀规则。若定义了路由前缀:(1)需要保证所有路由的path都具有此前缀(2)另需要添加一条记录:访问`/`应该重定向到路由前缀本身。\n // routes.push({\n // accumulativePath: '/',\n // thisLevelPath: '/',\n // redirect: routePrefix,\n // kind: 'redirect',\n // });\n // }\n const possibleIndexComponent = components.find((x) => x.__raw.isIndex);\n if (possibleIndexComponent) {\n // 首页规则。对标记为首页的页面,添加一条路由:`/`重定向到此页面。\n routes.push({\n accumulativePath: '/',\n thisLevelPath: ``,\n redirect: `${possibleIndexComponent.identifier}`,\n kind: 'redirect',\n });\n }\n // fallback路由规则。依次选择:名为notFound的顶级页面、标记为首页的页面。\n const fallbackComponent =\n components.find((x) => x.identifier === notFoundPageKeyword) ?? possibleIndexComponent;\n if (fallbackComponent) {\n routes.push({\n accumulativePath: '*',\n thisLevelPath: '*',\n redirect: `${fallbackComponent.identifier}`,\n kind: 'redirect',\n });\n }\n\n const authResourcePaths: string[] = [];\n const baseResourcePaths: string[] = [];\n const normalRoutes = routes.filter((r) => r.kind === 'normal');\n\n normalRoutes.forEach((r) => {\n const traverseRoutes = (route: RouteIR, isParentRouteAuth?: boolean) => {\n if (route.kind === 'normal') {\n const view = route.elementTemplate.__raw;\n // 页面是否需要权限,如果父页面需要权限,子页面也一定需要\n const isViewAuth = isParentRouteAuth || view.auth;\n\n if (isViewAuth) {\n authResourcePaths.push(route.accumulativePath);\n } else {\n baseResourcePaths.push(route.accumulativePath);\n }\n\n route.children?.forEach((rr) => {\n traverseRoutes(rr, isViewAuth);\n });\n }\n };\n traverseRoutes(r, false);\n });\n\n return {\n authResourcePaths,\n baseResourcePaths,\n routes,\n };\n },\n },\n});\n\n@injectable()\nexport class RoutesExtractionPlugin {\n extractRoute(\n components: ViewComponentIR[],\n routePrefix: string,\n options?: { lazy?: boolean }\n ): { routes: RouteIR[]; authResourcePaths: string[]; baseResourcePaths: string[] } {\n return routesExtractionPlugin.functions.extractRoute(components, routePrefix, options);\n }\n static install(c: Container) {\n c.bind(RoutesExtractionPlugin).toSelf();\n return c;\n }\n}\n","import {\n Argument,\n Assignment,\n BaseNode,\n BindEvent,\n CallFunction,\n genHash,\n Identifier,\n Logic,\n Param,\n Return,\n TypeAnnotation,\n Unparsed,\n ViewElement,\n} from '@lcap/nasl-concepts';\nimport {\n isBooleanLiteral,\n isIdentifier,\n isMemberExpression,\n isNullLiteral,\n isNumericLiteral,\n isStringLiteral,\n} from '@lcap/nasl-concepts/asserts';\nimport { BindAttributeIR, BindEventIR } from '../../types/ir';\nimport { Logger } from '../../utils/logger';\nimport { makePlugin } from '../../utils/plugin';\nimport {\n StateContextIR,\n bindEventToAction,\n bindViewElementEventToIR,\n logicToLogicIR,\n paramToIR,\n} from '../ir-builder-plugin';\nimport { ReactChildrenPropName, ReactFileDescription } from './react-codegen-plugin';\nimport { capitalize } from 'lodash';\n\nconst logger = Logger('component hack');\n\nexport const reactComponentLibHackPlugin = makePlugin({\n name: 'ReactComponentLibHackPlugin',\n functions: {\n __hooksDefinitions(): ReactFileDescription {\n return new ReactFileDescription(\n 'ReactComponentLibHackHooks',\n [\n {\n import: '{initUtils, cookie}',\n from: '@lcap/basic-template',\n },\n {\n import: '{Modal}',\n from: 'antd',\n },\n {\n import: '{message}',\n from: '@lcap/pc-react-ui',\n },\n {\n from: './apis',\n import: '{enumsMap, dataTypesMap}',\n },\n {\n from: '@lcap/basic-template',\n import: '{ initAuth }',\n },\n {\n from: './apis',\n import: '{dataTypesGlobal}',\n },\n ],\n [],\n [\n `\n const {utils} = initUtils({enumsMap, dataTypesMap});\n const ui = { showMessage: message.info };\n\n function buildNaslAuth(){\n const { auth: baseAuth } = initAuth();\n const auth = Object.assign({\n decryptByAES: dataTypesGlobal.decryptByAES,\n encryptByAES: dataTypesGlobal.encryptByAES,\n hasAuth: dataTypesGlobal.hasAuth,\n }, baseAuth);\n Object.assign(auth, {\n logout: async () => {\n return Modal.confirm({\n content: '确定退出登录吗?',\n title: '提示',\n okText: '确定',\n cancelText: '取消',\n onOk: async () => {\n await baseAuth.logout();\n cookie.erase('authorization');\n cookie.erase('username');\n window.location.reload();\n },\n });\n },\n });\n return auth;\n }\n\n Object.assign(utils, {\n jsonSerialize: utils.JsonSerialize || JSON.stringify,\n jsonDeserialize: utils.JsonDeserialize || JSON.parse,\n });\n\n const logging = {\n ERROR: console.error,\n WARN: console.warn,\n DEBUG: console.debug,\n INFO: console.info,\n };\n\n const nasl = {util: utils, logging, ui, auth: buildNaslAuth()};\n export const useNasl = () => {\n return nasl;\n };\n\n `,\n ]\n );\n },\n hackBindAttribute<T extends BindAttributeIR & { kind: 'expr' }>(\n b: T\n ): BindAttributeIR & { kind: 'expr' } {\n function getTypeAnnotation(x: BaseNode): TypeAnnotation | undefined {\n // @ts-expect-error\n return x.typeAnnotation ?? x.__TypeAnnotation;\n }\n function isNASLPrimitiveStringType(x: TypeAnnotation) {\n return (\n x.typeKind === 'primitive' && x.typeNamespace === 'nasl.core' && x.typeName === 'String'\n );\n }\n\n if (\n b.name === ReactChildrenPropName &&\n b.__raw.type === 'dynamic' &&\n (b.__raw.parentNode as ViewElement)?.tag !== 'template'\n ) {\n const exprTypeAnnotation: TypeAnnotation | undefined = getTypeAnnotation(b.expression.expr);\n if (exprTypeAnnotation && isNASLPrimitiveStringType(exprTypeAnnotation)) {\n // 已经是字符串类型,保持原样即可\n return b;\n }\n // 表达式作为直接children绑定时,需要套一层ToString\n const arg = Argument.from({ expression: b.expression.expr }, b.__raw, 'arguments');\n // TODO wudengke 处理这里的new TypeAnnotation,考虑直接创建为String类型\n arg.__TypeAnnotation = exprTypeAnnotation ?? new TypeAnnotation();\n const call = CallFunction.from({\n calleeName: 'ToString',\n calleeNamespace: 'nasl.util',\n arguments: [arg],\n });\n // 定形规则:ToString的返回值是String\n call.__TypeAnnotation = TypeAnnotation.createPrimitive('String');\n return {\n ...b,\n expression: { expr: call },\n };\n }\n return b;\n },\n },\n});\n","import { StringLiteral } from '@lcap/nasl-concepts';\nimport { GeneralComponentIR } from '../../types/ir';\nimport { notImplemented } from '../../utils/assert';\nimport { Logger } from '../../utils/logger';\nimport { makePlugin } from '../../utils/plugin';\nimport { kebab2Pascal } from '../../utils/str';\nimport { isNotNil } from '../../utils/types';\nimport { javaScriptCodeGenPlugin } from '../language/javascript-codegen-plugin';\nimport { jsxCodeGenPlugin } from '../language/jsx-codegen-plugin';\nimport { RouteIR } from '../misc/routes-extraction-plugin';\nimport { ComponentIRToPathDict, ImportIR, ReactFileDescription } from './react-codegen-plugin';\n\nconst l = Logger('ReactRouterPlugin');\n\nconst ReactRouterDefaultImports: ImportIR[] = [\n {\n from: 'react-dom',\n import: 'ReactDOM',\n },\n {\n from: 'react',\n import: 'React, { useEffect, useState }',\n },\n {\n from: 'react-router-dom',\n import: ' { RouterProvider, Navigate, useNavigate,useLocation } ',\n },\n {\n from: './router/component',\n import: '{ createRouter }',\n },\n {\n from: './router/hooks',\n import: '{ useUserInfo, useUserResources }',\n },\n {\n from: './nasl',\n import: '{ useAppConfig }',\n },\n];\nexport const ReactRouterDefaultViewFolderName = '__views__';\nexport const ReactRouterDefaultBizComponentsFolderName = '__bizComponents__';\n\nexport class NameMangler {\n dict = new Map<string, number>();\n query(name: string) {\n const v = this.inc(name);\n if (v === 1) {\n return `${name}`;\n }\n return `${name}${v}`;\n }\n private inc(name: string) {\n const v = this.initName(name);\n this.dict.set(name, v + 1);\n return v + 1;\n }\n private initName(name: string) {\n if (!this.dict.has(name)) {\n this.dict.set(name, 0);\n return 0;\n } else {\n return this.dict.get(name)!;\n }\n }\n}\n\nexport const reactRouterPlugin = makePlugin({\n name: 'ReactRouter',\n functions: {\n routeToCode(\n routes: RouteIR[],\n componentIRToPathDict: ComponentIRToPathDict,\n basePath: string,\n ): { code: string; imports: ImportIR[] } {\n const self = { ...jsxCodeGenPlugin.functions, ...javaScriptCodeGenPlugin.functions };\n const nameMangler = new NameMangler();\n const importConfigMap = new WeakMap<GeneralComponentIR, ImportIR>();\n const viewComponentImports: ImportIR[] = recursivelyExtractImportIR(routes);\n\n function recursivelyExtractImportIR(routes: RouteIR[]): ImportIR[] {\n return routes.flatMap((r) => {\n if (r.kind === 'normal') {\n const elementIdentifier = r.elementTemplate.identifier;\n if (elementIdentifier) {\n const path = componentIRToPathDict.get(r.elementTemplate);\n const componentName = kebab2Pascal(elementIdentifier);\n const coalescedName = kebab2Pascal(\n `${path}${elementIdentifier}`.replaceAll('/', '-').replace(/^-/, '')\n );\n const mangledName = nameMangler.query(coalescedName);\n r.elementMangledName = mangledName;\n l.debug({ mangledName: mangledName });\n const from = `./${ReactRouterDefaultViewFolderName}${path}/${componentName}`;\n const importIR = {\n from,\n import: mangledName,\n lazy: r.lazy,\n };\n importConfigMap.set(r.elementTemplate, importIR);\n return [importIR, ...recursivelyExtractImportIR(r.children ?? [])];\n }\n }\n return [];\n });\n }\n\n function serializeReactRoute(r: RouteIR): string | undefined {\n const path = r.thisLevelPath ?? '/';\n if (r.kind === 'normal') {\n const children = r.children?.map(serializeReactRoute).filter(isNotNil) ?? [];\n const jsx = self.printTag(r.elementMangledName ?? r.elementTemplate.identifier);\n const childrenStr = children.join(',\\n');\n return `{path: \"${path}\", meta: ${JSON.stringify(\n r.meta\n )}, children: [${childrenStr}], ${importConfigToPropertyStr()} \\}`;\n function importConfigToPropertyStr() {\n return `element: ${jsx}`;\n }\n }\n if (r.kind === 'redirect') {\n const to = self.printSyntaxNode(StringLiteral.from({ value: r.redirect }));\n return `{path: \"${path}\", element: <Navigate to={${to}\\} />\\}`;\n }\n notImplemented(r);\n }\n const imports: ImportIR[] = [\n ...ReactRouterDefaultImports,\n ...viewComponentImports,\n {\n from: '@lcap/pc-react-ui',\n import: '{ConfigProvider, RouterContext}',\n },\n {\n from: './platform.config',\n import: 'platformConfig',\n },\n {\n from: '@/components/FrontendEventWrapper',\n import: 'FrontendEventWrapper',\n },\n ];\n const routesConfig = routes.map(serializeReactRoute).filter(isNotNil).join(',\\n');\n const routerConfigStr = `const defaultRoutes = [{\n path: '${basePath || '/'}',\n children: [\n ${routesConfig}\n ],\n element: <FrontendEventWrapper></FrontendEventWrapper>,\n },];`;\n const code = `\n ${routerConfigStr}\n function setDocumentTitleByMetaTitle(metaTitle: string) {\n const appConfig = platformConfig.appConfig;\n const titleTemplate = appConfig.documentTitle;\n if (titleTemplate) {\n document.title = titleTemplate.replace(/\\\\$页面标题/g, metaTitle).replace(/\\\\$应用名称/g, appConfig.project);\n } else {\n document.title = \\`\\$\\{metaTitle\\}-\\${appConfig.project}\\`;\n }\n }\n function App() {\n const { userInfo, userInfoError, userInfoLoading } = useUserInfo();\n const appConfig = useAppConfig();\n const { baseResourcePaths } = appConfig;\n const { resources, resourcesError, resourcesLoading } = useUserResources();\n\n const [routes, setRoutes] = useState(defaultRoutes);\n\n if (userInfoLoading || resourcesLoading) {\n return <div>Loading...</div>;\n }\n\n const ensureStartsWithSlash = (str) => str.startsWith('/') ? str : '/' + str;\n\n const basename =\n window.LcapMicro?.routePrefix\n ? ensureStartsWithSlash(window.LcapMicro?.routePrefix)\n : undefined;\n\n const router = createRouter(routes, { resources, userInfo, basename, beforeEach: ({meta})=>{\n window?.beforeRouter?.({meta});\n if(meta?.title){\n setDocumentTitleByMetaTitle(meta.title);\n }\n } });\n\n return (\n <RouterContext.Provider value={{router,useNavigate,useLocation}}>\n <ConfigProvider theme={{ cssVar: { prefix: 'cw', key: 'cw-nasl'}}} prefixCls=\"cw\">\n <RouterProvider router={router} />\n </ConfigProvider>\n </RouterContext.Provider>\n );\n }\n\n export default App;\n `;\n return {\n code,\n imports,\n };\n },\n __hooksDefinitions(): ReactFileDescription {\n return new ReactFileDescription(\n 'ReactRouterHooks',\n [\n {\n from: 'react-router-dom',\n import: '{ useSearchParams, useNavigate }',\n },\n {\n from: '@lcap/basic-template',\n import: '{initRouter}',\n },\n ],\n [],\n [\n `\n const {link, destination} = initRouter();\n export const useLink = ()=>link;\n export const useDestination = useNavigate;\n `,\n ]\n );\n },\n },\n});\n","import {\n Argument,\n asyncFuncMap as NaslAsyncFuncMap,\n BaseNode,\n CallFunction,\n CallLogic,\n Connector,\n DefaultValue,\n Destination,\n Identifier,\n Interface,\n Logic,\n LogicItem,\n LogicItemNode,\n MemberExpression,\n Module,\n Param,\n Return,\n StringLiteral,\n SubLogic,\n TypeAnnotation,\n Unparsed,\n Variable,\n CallConnector,\n} from '@lcap/nasl-concepts';\n\nimport {\n isAbort,\n isAnchor,\n isAnonymousFunction,\n isArgument,\n isAssignee,\n isAssignment,\n isBatchAssignment,\n isBinaryExpression,\n isBindAttribute,\n isBlock,\n isBooleanLiteral,\n isCallAuthInterface,\n isCallConnector,\n isCallEvent,\n isCallFunction,\n isCallInterface,\n isCallLogic,\n isCallQueryComponent,\n isComment,\n isDefaultValue,\n isDestination,\n isEnd,\n isExternalDestination,\n isForEachStatement,\n isIdentifier,\n isIfStatement,\n isJSBlock,\n isJavaLogic,\n isLogic,\n isLogicItem,\n isMatch,\n isMatchCase,\n isMemberExpression,\n isNew,\n isNewComposite,\n isNewList,\n isNewMap,\n isNullLiteral,\n isNumericLiteral,\n isOqlQueryComponent,\n isParam,\n isProcessOutcome,\n isProcessOutcomes,\n isQueryAggregateExpression,\n isQueryFieldExpression,\n isQueryFromExpression,\n isQueryGroupByExpression,\n isQueryJoinExpression,\n isQueryLimitExpression,\n isQueryOrderByExpression,\n isQuerySelectExpression,\n isReturn,\n isSqlQueryComponent,\n isStart,\n isStrictCallLogic,\n isStringInterpolation,\n isStringLiteral,\n isSubLogic,\n isSwitchCase,\n isSwitchStatement,\n isTypeAnnotation,\n isUnaryExpression,\n isUnparsed,\n isValidationRule,\n isVariable,\n isWhileStatement,\n} from '@lcap/nasl-concepts/asserts';\n\nimport { transfromMetadataType, transformUnionTypeAnnotation } from '@lcap/nasl-concepts/service';\n\nimport * as breakpoint from '@lcap/nasl-breakpoint';\n\nimport { injectable } from 'inversify';\nimport * as JSON5 from 'json5';\nimport { isNil } from 'lodash';\nimport { JavaScriptDomain } from '../../service-interface';\nimport { neverImplemented, notImplemented, todo } from '../../utils/assert';\nimport { Logger } from '../../utils/logger';\nimport { findConceptKeyWordIndexFromNamespace } from '../../utils/nasl';\nimport { capitalizeFirstLetter } from '../../utils/str';\nimport { makePlugin } from '../../utils/plugin';\nimport { defaultErrorMessageDict } from './asset/defaultErrorMessage';\nimport { isLogNode } from '../misc/logging/copied-log';\n\n// TODO wudengke 处理它\nconst LogReportFunctionSymbol = '$logReport';\n\nconst logger = Logger('JavaScriptCodeGen');\n\ntype Other =\n | Return\n | Variable\n | Param\n | DefaultValue\n | breakpoint.AfterStartNode\n | breakpoint.BeforeEndNode\n | breakpoint.CallbackNode\n | breakpoint.BreakpointNode\n | BaseNode;\nexport type HasRuntimeSemantics = LogicItem | Logic | Other;\n\nexport type javaScriptCodeGenCallBackBag = {\n readonly resolve?: (\n payload:\n | { kind: 'calleeNamespace'; value: string }\n | {\n kind: 'identifier';\n value: Identifier;\n }\n ) => // TODO wudengke 可以返回语义更加丰富的信息。用对象包起来,可以给调用处指示是否需要插入?.\n string | undefined;\n readonly shouldInsertOptional?: boolean;\n readonly isAsyncAnonymousFunction?: boolean;\n};\nfunction getRuntimeStr(s: HasRuntimeSemantics, callbackBag?: javaScriptCodeGenCallBackBag): string {\n return toCode(wrapWithGenInitFromSchemaIfNecessary(s));\n\n function toCode(s: HasRuntimeSemantics) {\n // TODO wudengke 移动到 logging 插件当中\n if (isLogNode(s)) {\n if (s.__actualNode) {\n let code = getRuntimeStr(s.__actualNode, callbackBag);\n const messageExpr = s.__actualNode.arguments?.[0];\n const message = getRuntimeStr(messageExpr, callbackBag);\n const calleeName = s.__actualNode.calleeName;\n const logReportFunctionCalleeName = callbackBag?.resolve?.({\n kind: 'calleeNamespace',\n value: LogReportFunctionSymbol,\n });\n if (!logReportFunctionCalleeName) {\n throw new Error(`cannot reolve ${LogReportFunctionSymbol}`);\n }\n code += `;${logReportFunctionCalleeName}({\n logicName: '${s.__logic?.name}',\n path: '${s.__path}',\n level: '${calleeName}',\n message: ${message},\n });`;\n return code;\n }\n return '';\n } else if (isBreakpointLogic(s)) {\n return breakpointLogicToTS(s);\n } else if (isLogicItem(s)) {\n return logicItemToTS(s);\n } else if (isLogic(s)) {\n return logicToTs(s);\n }\n return otherToTS(s);\n }\n\n function wrapWithGenInitFromSchema<T extends HasRuntimeSemantics>(s: T): T | CallFunction {\n // 根据packages/nasl/src/concepts下的原始逻辑,这些语法节点可能需要包裹genInitFromSchema\n\n //@ts-expect-error typeAnnotation属性并不存在\n const typeAnnotation: TypeAnnotation | undefined = s.typeAnnotation || s.__TypeAnnotation;\n let { sortedTypeKey, typeKind, typeName, typeNamespace } = typeAnnotation || {};\n if (typeNamespace?.endsWith('.metadataTypes')) {\n const typeAn: TypeAnnotation | undefined = s.app.findNodeByCompleteName(\n typeNamespace + '.' + typeName\n )?.typeAnnotation;\n if (typeAn) {\n sortedTypeKey = `${typeAn.typeNamespace}.${typeAn.typeName}`;\n typeKind = typeAn.typeKind;\n typeName = typeAn.typeName;\n }\n }\n const needGenInitFromSchema =\n typeAnnotation && (!['primitive'].includes(typeKind ?? '') || typeName === 'DateTime');\n if (needGenInitFromSchema) {\n const code = toCode(s);\n const newNode = CallFunction.from(\n {\n calleeName: 'genInitFromSchema',\n arguments: [\n new Argument({ expression: new StringLiteral({ value: sortedTypeKey }) }),\n new Argument({ expression: new Unparsed({ code }) }),\n ],\n },\n s.parentNode,\n s.parentKey\n );\n return newNode;\n }\n return s;\n }\n\n function wrapWithGenInitFromSchemaIfNecessary<T extends HasRuntimeSemantics>(\n s: T\n ): T | CallFunction {\n if (isCallFunction(s) || isCallLogic(s) || isNewComposite(s) || isDefaultValue(s)) {\n return wrapWithGenInitFromSchema(s);\n }\n return s;\n }\n function toAnonymousFunctionStr<T extends LogicItem>(b: { logics: [T]; params: Param[] }) {\n const code = `(${toParamsStr()})=>(${toBodyStr()})`;\n return callbackBag?.isAsyncAnonymousFunction ? `async ${code}` : code;\n function toBodyStr() {\n const logic = b.logics[0];\n return getRuntimeStr(logic, { ...callbackBag, isAsyncAnonymousFunction: false });\n }\n function toParamsStr() {\n return b.params.map((x) => x.name).toString();\n }\n }\n\n function logicToTs(s: Logic | SubLogic): string {\n let code = 'async (';\n // 声明函数参数\n if (Array.isArray(s.params)) {\n code += s.params.map((x) => x.name).toString();\n }\n code += ') => {';\n // 为参数赋值\n if (Array.isArray(s.params)) {\n s.params.forEach((param) => {\n const str = getRuntimeStr(param, callbackBag);\n // TODO wudengke 如果没有默认值则不需要赋值\n if (param.name !== str) {\n code += `${param.name} = ${str};\\n`;\n }\n });\n }\n // 声明局部变量容器\n if (Array.isArray(s.variables)) {\n s.variables.forEach((x) => {\n code += `let ${getRuntimeStr(x, callbackBag)};\\n`;\n });\n }\n // 声明返回值容器\n if (Array.isArray(s.returns)) {\n s.returns.forEach((ret) => {\n code += `let ${getRuntimeStr(ret, callbackBag)};\\n`;\n });\n }\n if (Array.isArray(s.body)) {\n s.body.forEach((item) => {\n if (isNil(item)) {\n logger.error(`${s.nodePath} 的 body 有空值`);\n throw new Error('');\n }\n code += toCode(item);\n code += '\\n';\n });\n }\n code += '}';\n return code;\n }\n\n function isBreakpointLogic(s: HasRuntimeSemantics) {\n return (\n s instanceof breakpoint.AfterStartNode ||\n s instanceof breakpoint.BeforeEndNode ||\n s instanceof breakpoint.CallbackNode ||\n s instanceof breakpoint.BreakpointNode\n );\n }\n\n function breakpointLogicToTS(s: HasRuntimeSemantics): string {\n if (s instanceof breakpoint.AfterStartNode) {\n const id = s._logicNodePath;\n const logic = getRuntimeStr(s.logic as Logic, callbackBag);\n const breaker = `const $breaker = window.$breaker.colonize()`;\n const hook = `await $breaker.fireHook('after-start')('${id}')`;\n const list = [logic, breaker, hook];\n\n return list.filter(Boolean).join('\\n');\n }\n\n if (s instanceof breakpoint.BeforeEndNode) {\n const id = s._logicNodePath;\n const logic = getRuntimeStr(s.logic as Logic, callbackBag);\n const hook = `await $breaker.fireHook('before-end')('${id}')`;\n\n return `${hook}\\n${logic}`;\n }\n\n if (s instanceof breakpoint.CallbackNode) {\n const node = s.logic || s.variable;\n\n if (!node) {\n return '';\n }\n\n const code = getRuntimeStr(node as Logic, callbackBag);\n const founctional = breakpoint.isFunctional(node);\n\n if (!founctional) {\n return code;\n }\n\n if (!code) {\n return code;\n }\n\n return `$breaker.transfer(($breaker) => ${code})`;\n }\n\n if (s instanceof breakpoint.BreakpointNode) {\n const node = s.logic || s.variable;\n const id = s._nodePath;\n const keyword = `generateBreakpoint('${id}'`;\n const breaker = id && `await $breaker.generateBreakpoint('${id}', ${breakpoint.parse})()`;\n\n if (!node) {\n return breaker;\n }\n\n let result;\n\n const generators = breakpoint.makeGenerators(false, getRuntimeStr, callbackBag);\n result = generators.reduce((code, generator) => code || generator(s)(breaker), '');\n\n const failsafes = breakpoint.makeGenerators(true, getRuntimeStr, callbackBag);\n result = failsafes.reduce((code, generator) => {\n const useful = code && code.includes(keyword);\n return useful ? code : generator(s)(breaker);\n }, result);\n\n return result || breaker;\n }\n\n return notImplemented(s);\n }\n\n function otherToTS(s: HasRuntimeSemantics): string {\n if (isReturn(s)) {\n const left =\n callbackBag?.resolve?.({\n kind: 'identifier',\n value: new Identifier({ name: s.name }),\n }) ?? s.name;\n const right = makeRight(s);\n return `${left} = ${right}`;\n function makeRight(returnNode: Return) {\n let code = '';\n const typeAnnotation = returnNode.typeAnnotation || returnNode.__TypeAnnotation;\n const needGenInitFromSchema =\n typeAnnotation &&\n (!['primitive'].includes(typeAnnotation.typeKind) ||\n typeAnnotation.typeName === 'DateTime');\n if (needGenInitFromSchema) {\n code += `genInitFromSchema('${typeAnnotation?.sortedTypeKey}',`;\n }\n const defaultExpr = returnNode.defaultValue?.toJS?.() ?? 'undefined';\n code += defaultExpr;\n if (needGenInitFromSchema) {\n code += `)`;\n }\n return code;\n }\n }\n\n if (isParam(s)) {\n const expressionJS = s.defaultValue ? getRuntimeStr(s.defaultValue, callbackBag) : undefined;\n if (expressionJS) {\n return `${s.name} === undefined ? ${expressionJS} : ${s.name}`;\n }\n return `${s.name}`;\n // TODO wudengke 确认逻辑\n // return `${s.name} === undefined ? (localStore.$queryParams.has(${JSON.stringify(s.name)}) ? genInitFromSchema('${undefined}', localStore.$queryParams.get(${JSON.stringify(s.name)})): ${expressionJS}) : ${s.name}`;\n }\n\n if (isVariable(s)) {\n const typeAnnotation = s.typeAnnotation || s.__TypeAnnotation;\n let { sortedTypeKey, typeKind, typeName, typeNamespace } = typeAnnotation || {};\n if (typeNamespace?.endsWith('.metadataTypes')) {\n const referenceNode = s.app.findNodeByCompleteName(typeNamespace + '.' + typeName) || {};\n const typeAn = referenceNode.typeAnnotation || {};\n sortedTypeKey = `${typeAn.typeNamespace}.${typeAn.typeName}`;\n typeKind = typeAn.typeKind;\n typeName = typeAn.typeName;\n }\n const needGenInitFromSchema =\n typeAnnotation && (!['primitive'].includes(typeKind) || typeName === 'DateTime');\n let code = `${s.name} = `;\n if (needGenInitFromSchema) {\n code += `genInitFromSchema('${sortedTypeKey}',`;\n }\n\n if (s.defaultValue?.expression) {\n const expressionJS = getRuntimeStr(s.defaultValue.expression, callbackBag);\n code += expressionJS;\n } else {\n code += 'undefined';\n }\n if (needGenInitFromSchema) {\n code += `)`;\n }\n return code;\n }\n\n if (isDefaultValue(s)) {\n let code = '';\n if (\n ['Date', 'Time', 'DateTime'].includes((s.parentNode as any)?.typeAnnotation?.typeName) &&\n (s.expression as any)?.value === ''\n ) {\n return 'null';\n }\n code += s.expression ? getRuntimeStr(s.expression, callbackBag) : `undefined`;\n return code;\n }\n\n return notImplemented(s);\n }\n\n function qualifiedCalleeName(a: { calleeNamespace: string | undefined; calleeName: string }) {\n if (a.calleeNamespace) {\n const ns = a.calleeNamespace;\n const isExtensionsLibrary = ns.startsWith('extensions.');\n const isFrontendLibrary = ns.startsWith('extensions.') && ns.includes('.frontends.');\n const qualifiedCallee = `'${a.calleeNamespace}.${a.calleeName}'`;\n if (a.calleeNamespace.startsWith('connector.')) {\n // FIXME wudengke hack\n return `apiClient[${qualifiedCallee}]`;\n } else if (a.calleeNamespace.startsWith('sharedApp.')) {\n return `apiClient[${qualifiedCallee}]`;\n } else if (a.calleeNamespace.startsWith('app.dataSources.')) {\n // FIXME wudengke hack\n return `apiClient[${qualifiedCallee}]`;\n } else if (isExtensionsLibrary) {\n if (isFrontendLibrary) {\n // calleeNamespace 形如 'extensions.cw_cryptojs_library.frontends.pc.logics'\n const extensionLibraryName = ns.split('.')[1];\n return `$library['${extensionLibraryName}']['${a.calleeName}']`;\n } else {\n // 对服务端依赖库的调用\n return `apiClient[${qualifiedCallee}]`;\n }\n }\n const calleeNamespace =\n callbackBag?.resolve?.({\n kind: 'calleeNamespace',\n value: a.calleeNamespace,\n }) ?? a.calleeNamespace;\n return `${calleeNamespace}.${a.calleeName}`;\n } else {\n return (\n callbackBag?.resolve?.({\n kind: 'identifier',\n value: new Identifier({ name: a.calleeName }),\n }) ?? a.calleeName\n );\n }\n }\n\n function processV2CallLogicToJS(s: CallLogic) {\n let code = '';\n code += `window.$systemProcessV2['${s.calleeName}']?.`;\n code += `({\n body: {\n `;\n const argsStr = (s?.arguments || [])\n .filter((obj) => obj?.expression)\n .map(\n (obj) =>\n `\\n${obj.keyword}: ${obj.expression ? getRuntimeStr(obj.expression, callbackBag) : ''}`\n )\n .join(', ');\n code += argsStr;\n\n code += `}\n })`;\n return code;\n }\n\n function generalCallToJS(s: CallFunction | CallLogic | CallConnector) {\n if (isCallLogic(s) && s.isProcessV2Logic) {\n return processV2CallLogicToJS(s);\n }\n\n const calleeName = qualifiedCalleeName(s);\n const args = isCallLogic(s)\n ? getArgs(s).join(', ')\n : s.arguments.map((x) => getRuntimeStr(x, callbackBag)).join(', ');\n // FIXME wudengke 去掉?\n return `${calleeName}?.(${args})`;\n\n function getArgs(s: CallLogic | CallConnector) {\n function getConfigCode() {\n if (isCallConnector(s)) {\n const connectionName = s.calleeConnectionName;\n if (connectionName) {\n return `\n config: {\n download: false,\n connectionName: ${JSON.stringify(connectionName)},\n },`;\n }\n }\n\n const logic: Logic | undefined = s.getCallNode();\n const isManualErrorHandlingEnabled =\n s.handleError && logic && Logic.checkLogicReturnTypeHasError(logic);\n const isCustomErrorMessageEnabled = !isManualErrorHandlingEnabled && !!s.errorMessage;\n const handleErrorCode = isManualErrorHandlingEnabled ? `handleError: true,` : '';\n const errorMessageCode =\n isCustomErrorMessageEnabled && s.errorMessage\n ? `errorMessage: ${logicItemToTS(s.errorMessage)},`\n : '';\n\n return `config: {\n download: false,\n ${handleErrorCode}\n ${errorMessageCode}\n }, `;\n }\n // from packages/nasl/src/concepts/CallLogic__.ts\n let code = '';\n code += `\n ${getConfigCode()}\n headers: {\n \"lcap-calllogic-uuid\": \"${s.uuid}\",\n },`;\n const calleeName = s.calleeName;\n if (!s.isViewLogic) {\n const logic = s.getCallNode() as Logic;\n const args = logic?.params || [];\n const isSpreadFunc = args.some((arg) => arg.spread);\n const keywordEntitiesIndex = findConceptKeyWordIndexFromNamespace(\n s.calleeNamespace,\n 'entities'\n );\n const keywordProcessIndex = findConceptKeyWordIndexFromNamespace(\n s.calleeNamespace,\n 'processes'\n );\n if (keywordEntitiesIndex !== -1) {\n let logicArgs = s.arguments;\n let breakBody = false;\n switch (calleeName) {\n case 'get':\n case 'delete': {\n logicArgs = [];\n code += `query: {`;\n const argsStr = args\n .map((arg, index) => {\n const actualArg = s.arguments?.[index];\n return {\n keyword: arg?.name,\n arg: actualArg,\n };\n })\n .filter((obj) => obj.arg) // 示例:赋值节点右边为调用节点时,调用节点会包两层断点节点,在翻译时调用节点的形参params会多传入一个name为attribute的参数,arguments 没有对应值,导致actualArg为undefined,所以需要过滤掉\n .map((obj) => `\\n${obj.keyword}: ${getRuntimeStr(obj.arg, callbackBag)}`)\n .join(', ');\n code += argsStr;\n code += `},\\n`;\n break;\n }\n case 'update':\n case 'createOrUpdate':\n case 'batchUpdate': {\n code += `body: {\\n`;\n const argsStr = logicArgs\n .map((arg) => {\n const name =\n arg.keyword === 'body'\n ? s.calleeName === 'batchUpdate'\n ? 'entities'\n : 'entity'\n : arg.keyword;\n return `${name}: ${getRuntimeStr(arg.expression!, callbackBag)}`;\n })\n .join(',\\n');\n code += argsStr;\n code += `},\\n`;\n logicArgs = [];\n breakBody = true;\n break;\n }\n case 'updateBy': {\n code += `body: {`;\n const argsStr = logicArgs\n .map((arg: any) => {\n const name = arg.keyword === 'body' ? 'entity' : arg.keyword;\n // filter回调函数\n if (arg.expression.returnExpression) {\n const argsStr = JSON.stringify(\n handleMember(arg.expression.returnExpression)\n ).replace(/\"__@@(.*?)@@__\"/g, '$1');\n return `${name}: {\n concept: 'Function',\n name: 'filter',\n returnExpression: window.$resolveRequestData(${argsStr})\n }`;\n }\n return `${name}: ${getRuntimeStr(arg.expression, callbackBag)}`;\n })\n .join(',');\n code += argsStr;\n code += `},\\n`;\n logicArgs = [];\n breakBody = true;\n break;\n }\n case 'deleteBy': {\n code += `body: `;\n const argsStr = JSON.stringify(\n handleMember((logicArgs[0].expression as any).returnExpression)\n ).replace(/\"__@@(.*?)@@__\"/g, '$1');\n code += `{\n concept: 'Function',\n name: 'filter',\n returnExpression: window.$resolveRequestData(${argsStr})\n }`;\n code += `,\\n`;\n logicArgs = [];\n breakBody = true;\n break;\n }\n default:\n break;\n }\n const bodyArgument = logicArgs.find((arg) => arg.keyword === 'body');\n if (!breakBody) {\n if (bodyArgument) {\n code += `\\n${bodyArgument?.keyword}: ${getRuntimeStr(bodyArgument, callbackBag)}`;\n } else {\n code += `body: {}`;\n }\n }\n } else {\n const isProcessLogic = keywordProcessIndex !== -1;\n const isShowArgument = (arg?: Argument) => {\n return !!arg?.expression;\n };\n code += `path: {},\n body: {`;\n if (!isProcessLogic) {\n const formatArgs: Array<Param> = [...args];\n let spreadParams: Param | undefined = undefined;\n // 如果是可变参数,需要先去掉最后一位可变参数位,在后面进行单独处理\n if (isSpreadFunc) {\n spreadParams = formatArgs.pop();\n }\n const filterArgs = formatArgs\n .map((arg, index) => {\n const actualArg = s.completeArguments[index];\n const keyword = arg?.name;\n return {\n keyword,\n arg: actualArg,\n };\n })\n .filter((item) => isShowArgument(item.arg));\n const argsStr = filterArgs\n .map((obj) => `\\n${obj?.keyword}: ${getRuntimeStr(obj?.arg, callbackBag)}`)\n .join(', ');\n code += argsStr;\n // 如果参数长度不为 0,则表示有参数,需要添加逗号\n // 放弃开头加逗号的写法,因为这样会导致参数为空的时候,会多一个逗号\n // https://projectmanage.netease-official.lcap.163yun.com/dashboard/BugDetail?id=2851152441926912\n if (filterArgs.length) {\n code += ', ';\n }\n // 如果是可变参数,需要单独处理\n if (isSpreadFunc) {\n const spreadArg = s.completeArguments.slice(formatArgs.length);\n const isShowArgument = (arg?: Argument) => {\n return arg?.expression;\n };\n const spreadArgStr = spreadArg\n .filter((arg) => {\n return isShowArgument(arg);\n })\n .map((arg) => getRuntimeStr(arg, callbackBag) || '')\n .join(', ');\n code += `\\n${spreadParams!.name}: [${spreadArgStr}],`;\n }\n const completeTypeArguments = s.__TypeArguments?.length\n ? s.__TypeArguments\n : s.typeArguments;\n if (Array.isArray(completeTypeArguments) && completeTypeArguments.length) {\n code += `\\n__typeArguments: ${JSON5.stringify(completeTypeArguments)}`;\n }\n }\n code += `}`;\n }\n } else {\n // TODO wudengke 搬运一下代码\n return s.arguments.map((x) => getRuntimeStr(x, callbackBag));\n }\n\n return [`{${code}}`];\n\n function handleMember(root: any): any {\n if (!root) return;\n if (root.concept === 'Identifier') {\n const str = getRuntimeStr(root, callbackBag);\n return {\n concept: root.concept,\n name: root.name,\n value: `__@@${str}@@__`,\n expression: str,\n };\n }\n if (root.concept === 'MemberExpression') {\n let { concept } = root;\n let { value } = root;\n if (root?.object.name === '_') {\n return {\n concept,\n name: root.name,\n value,\n object: root.object,\n property: root.property,\n };\n }\n let expression: string | undefined = getRuntimeStr(root, callbackBag);\n if (root.object?.namespace === 'app.enums') {\n value = expression.replace(/^\"(.+)\"$/, '$1');\n expression = undefined;\n concept = 'StringLiteral';\n } else {\n value = `__@@${expression}@@__`;\n }\n return {\n concept,\n name: root.name,\n value,\n expression,\n };\n }\n\n let left;\n if (root.concept === 'UnaryExpression') {\n left = handleMember(root.argument);\n } else {\n left = handleMember(root.left);\n }\n const right = handleMember(root.right);\n return {\n concept: root.concept,\n name: root.name,\n value: root.value,\n expression: root.expression,\n operator: root.operator,\n left,\n right,\n };\n }\n }\n }\n\n function batchLogicItemsToTS(s: LogicItemNode[]): string {\n return s.map((n) => getRuntimeStr(n, callbackBag)).join(';\\n');\n }\n\n function logicItemToTS(s: LogicItem): string {\n if (isSubLogic(s)) {\n // SubLogic和Logic的处理逻辑是一样的\n return logicToTs(s);\n } else if (isAnonymousFunction(s)) {\n // Vue 翻译器的特殊处理\n const grandParent = s.parentNode?.parentNode;\n if (\n isCallLogic(grandParent) &&\n /dataSources\\.[^.]+\\.entities\\.[^.]+\\.logics/.test(grandParent.calleeNamespace) &&\n ['update', 'updateBy', 'createOrUpdate', 'batchUpdate'].includes(grandParent.calleeName)\n ) {\n const toJSOfEntityLogicProperties = (): string => {\n let code = '[';\n if (s.body && isNewList(s.body)) {\n // @ts-expect-error 迁移自Vue翻译器\n s.body.items.forEach((item: MemberExpression, index, array) => {\n code += `'${getRuntimeStr(item.property, undefined)}'`;\n if (index !== array.length - 1) code += ',';\n });\n }\n code += ']';\n return code;\n };\n return toJSOfEntityLogicProperties();\n }\n return toAnonymousFunctionStr({ logics: [s.body], params: s.params });\n } else if (isAbort(s)) {\n return `throw Error('程序中止');`;\n } else if (isStart(s)) {\n return '';\n } else if (isEnd(s)) {\n const ret = s.logic.returns.at(0);\n if (ret) {\n return `return ${ret.name};`;\n } else {\n return 'return;';\n }\n } else if (isIfStatement(s)) {\n let code = `if(${getRuntimeStr(s.test, callbackBag)}){\n ${batchLogicItemsToTS(s.consequent)}\n }`;\n if (s.alternate.length) {\n return `${code} else {${batchLogicItemsToTS(s.alternate)}\\}`;\n }\n return code;\n } else if (isSwitchStatement(s)) {\n let code = '';\n s.cases.forEach((item) => {\n code += getRuntimeStr(item, callbackBag);\n });\n return code;\n } else if (isSwitchCase(s)) {\n const parent = s.parentNode;\n if (!isSwitchStatement(parent)) {\n throw new Error('SwitchCase的父节点不是SwitchStatement');\n }\n const index = parent.cases.indexOf(s);\n const length = parent.cases.length;\n if (index === -1) {\n throw new Error('无法在父节点中找到此SwitchCase');\n }\n let code = '';\n if (index === 0) {\n code = 'if (';\n code += s.test ? getRuntimeStr(s.test, callbackBag) : '';\n code += ') {\\n';\n } else if (index !== length - 1) {\n code = 'else if (';\n code += s.test ? getRuntimeStr(s.test, callbackBag) : '';\n code += ') {\\n';\n } else {\n code += 'else {\\n';\n }\n if (Array.isArray(s.consequent)) {\n s.consequent.forEach((logicItem) => {\n code += `${getRuntimeStr(logicItem, callbackBag)}\\n`;\n });\n }\n code += '}\\n';\n return code;\n } else if (isForEachStatement(s)) {\n let code = '';\n const list = s.each ? getRuntimeStr(s.each, callbackBag) : '';\n const suffix = s.getVariableSuffix();\n const eachCode = `$forEachListVariable${suffix}`;\n let endValue = '';\n if (s.end) {\n endValue = getRuntimeStr(s.end, callbackBag);\n } else if (s.each) {\n endValue = `(${eachCode} || {}).length`;\n }\n code += `var ${eachCode} = ${list};\\n`;\n code += `var $forEachStartVariable${suffix} = ${\n s.start && getRuntimeStr(s.start, callbackBag)\n };\\n`;\n code += `var $forEachEndVariable${suffix} = ${endValue};\\n`;\n code += `if(Array.isArray($forEachListVariable${suffix})) {\\n`;\n code += `for (let ${s.index.name} = $forEachStartVariable${suffix}; `;\n code += `${s.index.name} < $forEachEndVariable${suffix}; ${s.index.name}++) {\\n`;\n code += `var ${s.item.name} = $forEachListVariable${suffix}[${s.index.name}];\\n`;\n if (Array.isArray(s.body)) {\n s.body.forEach((logicItem) => {\n code += `${getRuntimeStr(logicItem, callbackBag)}\\n`;\n });\n }\n code += '}\\n';\n code += '}\\n';\n return code;\n } else if (isWhileStatement(s)) {\n let code = '';\n code += 'while (';\n code += s.test ? getRuntimeStr(s.test, callbackBag) : '';\n code += ') {\\n';\n\n if (Array.isArray(s.body)) {\n s.body.forEach((logicItem) => {\n code += `${getRuntimeStr(logicItem, callbackBag)}\\n`;\n });\n }\n\n code += `}\\n`;\n return code;\n } else if (isAssignment(s)) {\n return `${getRuntimeStr(s.left, {\n ...callbackBag,\n shouldInsertOptional: false,\n })} = ${getRuntimeStr(s.right, callbackBag)}`;\n } else if (isBatchAssignment(s)) {\n // 迁移自Vue的BatchAssignment@toJS\n\n let code = '';\n const rightMap = new Map();\n s.assignmentLines.forEach(({ leftIndex, rightIndex }) => {\n const rightIndexJson = JSON.stringify(rightIndex);\n if (rightMap.has(rightIndexJson)) {\n rightMap.set(rightIndexJson, [...rightMap.get(rightIndexJson), leftIndex]);\n } else {\n rightMap.set(rightIndexJson, [leftIndex]);\n }\n });\n rightMap.forEach((leftIndexs, rightIndexJson) => {\n const rightIndex = JSON.parse(rightIndexJson) || [];\n const leftItems = leftIndexs.map((leftIndex: Array<number>) => {\n const leftItem =\n leftIndex.length !== 1 ? s.left.members[leftIndex[1]] : s.left.expression;\n return leftItem;\n });\n const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];\n const rightItem =\n rightSecond !== undefined\n ? s.rights[rightFirst].members[rightSecond]\n : s.rights[rightFirst].expression;\n leftItems.forEach((leftItem: LogicItem) => {\n code += `${getRuntimeStr(leftItem, { ...callbackBag, shouldInsertOptional: false })}`;\n code += ` = `;\n });\n code += `${getRuntimeStr(rightItem, callbackBag)}`;\n code += ';\\n';\n });\n return code;\n } else if (isComment(s)) {\n const midLines = s.value.split('\\n').map((x) => `* ${x}`);\n return ['/**', ...midLines, '*/'].join('\\n');\n } else if (isStrictCallLogic(s)) {\n // HACK wudengke 优雅一点\n if (\n ['jsonSerialize', 'jsonDeserialize'].includes(s.calleeName) &&\n s.calleeNamespace === 'nasl.util'\n ) {\n // 不需要await了\n return generalCallToJS(s);\n }\n\n if (\n s.calleeNamespace === 'nasl.browser' ||\n s.calleeNamespace === 'nasl.configuration' ||\n s.calleeNamespace === 'nasl.process'\n ) {\n s.calleeNamespace = '$global';\n }\n return `await (${generalCallToJS(s)})`;\n } else if (isCallConnector(s)) {\n return `await (${generalCallToJS(s)})`;\n } else if (isCallFunction(s)) {\n // 搬运自原来的CallFunction@toJS\n let code = '';\n\n const ancestorLogic = s.getAncestor('Logic');\n /**\n * 若在Logic下,则翻译为异步的版本\n * 因为其中子表达式可能会调用await\n */\n let possibleAsyncCalleeName = s.calleeName;\n let isAsyncCallee = false;\n if (s.view && ancestorLogic) {\n possibleAsyncCalleeName = NaslAsyncFuncMap[s.calleeName]\n ? NaslAsyncFuncMap[s.calleeName]\n : possibleAsyncCalleeName;\n if (NaslAsyncFuncMap[s.calleeName]) {\n isAsyncCallee = true;\n }\n }\n\n const qualifiedCallee = qualifiedCalleeName({\n calleeName: possibleAsyncCalleeName,\n calleeNamespace: s.calleeNamespace,\n });\n\n code += `${qualifiedCallee}`;\n code += '(';\n\n let argTyAnno;\n if (['ToString', 'EnumItemToText', 'EnumItemToStructure'].includes(s.calleeName)) {\n const arg0 = s.arguments[0];\n argTyAnno = (arg0 as any).typeAnnotation || arg0.__TypeAnnotation;\n } else if (s.calleeName === 'FromString') {\n argTyAnno = s.typeArguments?.[0];\n }\n\n // 调整 ToString 的 typeKey 到第一个参数,剩下的以后重构。\n // 事实上,大部分编译器都会选择把 type tag 放到前端来做运行时匹配,而非末位。\n if (\n ['ToString', 'EnumItemToText', 'EnumItemToStructure'].includes(s.calleeName) &&\n argTyAnno\n ) {\n if ('ToString' === s.calleeName) {\n argTyAnno = transfromMetadataType(argTyAnno, s.app);\n }\n code += `'${argTyAnno.sortedTypeKey}', `;\n }\n\n if (Array.isArray(s.arguments) && s.arguments.length) {\n s.arguments.forEach((arg, index) => {\n // TODO: wudengke 移动到IR构建阶段\n let argStr = getRuntimeStr(arg, {\n ...callbackBag,\n isAsyncAnonymousFunction: isAsyncCallee,\n });\n const argTypeAnnotation = arg.typeAnnotation || arg.__TypeAnnotation;\n transformUnionTypeAnnotation(argTypeAnnotation, s.app);\n const { sortedTypeKey } = transfromMetadataType(argTypeAnnotation, s.app);\n if (['HasValue'].includes(s.calleeName)) {\n argStr = `{ type: '${sortedTypeKey}', value: ${argStr} }`;\n }\n code += argStr;\n if (index !== s.arguments?.length - 1) code += ', ';\n });\n }\n\n if (s.calleeName === 'FromString' && argTyAnno) {\n const { sortedTypeKey } = transfromMetadataType(argTyAnno, s.app);\n code += `, '${sortedTypeKey}'`;\n }\n // 用作做语义控制。后面这段代码没完全理解,需要保持进入条件不变。\n const flagControl = ['ToString', 'FromString'].includes(s.calleeName) && argTyAnno;\n if (!flagControl && Array.isArray(s.typeArguments) && s.typeArguments.length) {\n if (s.arguments?.length) code += ', ';\n\n const typeArgumentsLength = s.typeArguments.length;\n s.typeArguments?.forEach((tyArg, index) => {\n code += JSON.stringify(tyArg);\n if (index !== typeArgumentsLength - 1) code += ', ';\n });\n }\n\n code += ')';\n if (isAsyncCallee) {\n return `await (${code})`;\n }\n return code;\n } else if (isCallInterface(s)) {\n // 迁移自Vue翻译器的CallInterface@toJS\n\n const { calleewholeKey, app, completeArguments } = s;\n const [, _name, , _interfaceName] = calleewholeKey.split('.');\n\n let _module: Module | Connector | undefined = getModule();\n\n function getModule(): Module | Connector | undefined {\n // 由于自定义连接器的引入,目前在 集成中心下也存在着一部分接口\n // 因此,需要额外判断,如果是自定义连接器需要拿 app.connectorDependencies 中的接口或者 app.integration 中connector下面的接口\n const isCustomConnector = s.getAncestor('Connector');\n const isInIntegration = s.getAncestor('Integration');\n if (isCustomConnector && isInIntegration) {\n return app?.integration?.connectors?.find?.((item) => item.name === _name);\n } else if (isCustomConnector && !isInIntegration) {\n return app?.connectorDependencies?.find?.((item) => item.name === _name);\n } else {\n // default\n return app?.interfaceDependencies?.find?.((item) => item.name === _name);\n }\n }\n const _interface = (_module as Module)?.interfaces?.find?.(\n (item) => item.name === _interfaceName\n );\n if (!_interface) {\n if (!s.calleeNamespace || !s.calleeName) throw new Error('调用接口为空');\n throw new Error(`${_name}下的${_interfaceName}接口未找到`);\n }\n let isSimpleBody = false; // 兼容body只有基本类型的\n const _params = (_interface as Interface).params;\n const _queries = _params.filter((item) => item.in === 'query').map((item) => item.name);\n const _headers = _params.filter((item) => item.in === 'header').map((item) => item.name);\n const _body = _params\n .filter((item) => item.in === 'body')\n .map((item) => {\n if (item.typeAnnotation.typeKind === 'primitive') {\n isSimpleBody = true;\n }\n return item.name;\n });\n const _paths = _params.filter((item) => item.in === 'path').map((item) => item.name);\n\n /** 填充参数信息 */\n const setArgumentCode = (\n args: Argument[],\n keys: string[],\n code: string,\n useKeyWord: boolean,\n useRest: boolean\n ) => {\n const filledArgs = args\n // 维持原样,暂时不过滤没有填入值的参数\n // .filter((arg) => Boolean(arg?.expression))\n .filter((arg) => keys.includes(arg.keyword));\n\n filledArgs.forEach((arg, index) => {\n const argStr = getRuntimeStr(arg, callbackBag);\n if (useRest) {\n code += ` ...${argStr}`;\n } else if (useKeyWord) {\n code += `\\n'${arg?.keyword}': ${argStr}`;\n } else {\n code += ` ${argStr}`;\n }\n\n if (index !== args.length - 1) {\n code += ', ';\n }\n });\n\n if (filledArgs.length === 0 && !useKeyWord && !useRest) {\n code += 'undefined';\n }\n\n return code;\n };\n\n let code = `await $services['_custom']['${s.calleeNamespace}.${s.calleeName}']`;\n\n const isManualErrorHandlingEnabled = s.handleError;\n const isCustomErrorMessageEnabled = !isManualErrorHandlingEnabled && !!s.errorMessage;\n const handleErrorCode = isManualErrorHandlingEnabled ? `handleError: true,` : '';\n const errorMessageCode =\n isCustomErrorMessageEnabled && s.errorMessage\n ? `errorMessage: ${logicItemToTS(s.errorMessage)},`\n : '';\n\n code += `({ config: {\\ndownload: false,\\n${errorMessageCode}${handleErrorCode} },\\nquery: {`;\n code = setArgumentCode(completeArguments, _queries, code, true, false);\n code += `}, path: {`;\n code = setArgumentCode(completeArguments, _paths, code, true, false);\n code += `}, headers: {`;\n code = setArgumentCode(completeArguments, _headers, code, true, false);\n code += `},\\n`;\n\n if (isSimpleBody) {\n code += `body: `;\n code = setArgumentCode(completeArguments, _body, code, false, false);\n } else {\n code += `body: {`;\n code = setArgumentCode(completeArguments, _body, code, false, true);\n code += '}';\n }\n\n code += '\\n})';\n // TODO wudengke 确认这个逻辑\n const typeAnnotation = (s as any).typeAnnotation || s.__TypeAnnotation;\n const needGenInitFromSchema =\n typeAnnotation && !['primitive'].includes(typeAnnotation.typeKind);\n if (needGenInitFromSchema) {\n code = `genInitFromSchema('${typeAnnotation?.sortedTypeKey}', ${code})`;\n }\n return code;\n } else if (isCallAuthInterface(s)) {\n return neverImplemented();\n } else if (isDestination(s)) {\n const destUrl = destinationToUrlExpr(s);\n // 若Destination的父级节点为BindAttribute,则只需翻译为url字符串表达式\n const urlOnly = isBindAttribute(s.parentNode);\n if (urlOnly) {\n return destUrl;\n }\n let url = '';\n url += '$destination(';\n url += destUrl;\n url += ',\"';\n url += `${s.target}`;\n url += '\")';\n function destinationToUrlExpr(s: Destination) {\n let url = '`';\n const viewArr = s.genViewArr();\n if (Array.isArray(viewArr) && viewArr.length) {\n // FIXME wudengke 这个规则抽离到插件中\n const prefixPath = s.frontend?.prefixPath;\n url += `${prefixPath}/${viewArr.join('/')}`;\n const { completeArguments } = s;\n if (completeArguments.length) {\n const node = s.viewNode;\n let logicParam: Param[] = [];\n if (node?.params) {\n logicParam = node.params;\n }\n const logicParamLength = logicParam.length;\n const args = completeArguments\n .map((arg, index) => {\n const value = getRuntimeStr(arg, callbackBag);\n let argStr = '';\n if (value && index < logicParamLength) {\n argStr += `${arg.keyword}=` + '${';\n if (value === 'undefined') {\n argStr += `null`;\n } else {\n argStr += value;\n }\n argStr += '}';\n }\n return argStr;\n })\n .filter((arg) => !!arg);\n url += `?${args.join('&')}`;\n }\n if (s.anchor) {\n const anchor = getRuntimeStr(s.anchor, callbackBag);\n if (anchor) url += `#\\${${anchor}}`;\n }\n }\n url += '`';\n return url;\n }\n return url;\n } else if (isExternalDestination(s)) {\n let code = '';\n if (s.link) {\n const url = getRuntimeStr(s.link, callbackBag);\n const urlOnly = isBindAttribute(s.parentNode);\n if (urlOnly) {\n return url;\n }\n // TODO wudengke 换成正经的CallFunction\n const calleeName = callbackBag?.resolve?.({\n kind: 'identifier',\n value: new Identifier({ name: '$link' }),\n });\n code += `${calleeName}(\\`$\\{`;\n code += `${url}`;\n code += '}';\n if (s.anchor) {\n const anchor = getRuntimeStr(s.anchor, callbackBag);\n if (anchor) code += `#\\${${anchor}}`;\n }\n code += '`,\"';\n code += `${s.target}`;\n code += '\")';\n }\n return code;\n } else if (isValidationRule(s)) {\n /**\n * 迁移自toVue\n */\n\n let code = '{';\n // 兼容旧的简写模式\n if (s.calleeName && s.calleeName.includes('(')) {\n return `'${s.calleeName}'`;\n } else if (s.calleeName === 'unique') {\n code += `validate: 'excluded',`;\n } else if (s.calleeName === 'confirmed') {\n code += `validate: 'is',`;\n } else {\n code += `validate: '${s.calleeName}',`;\n }\n if (s.arguments.length) {\n let args = '[';\n s.arguments?.forEach((arg, index) => {\n args += getRuntimeStr(arg, callbackBag);\n if (index !== s.arguments?.length - 1) args += ', ';\n });\n args += ']';\n code += `args: ${args} ,`;\n }\n if (s.errorMessage) {\n code += `message: ${getRuntimeStr(s.errorMessage, callbackBag)},`;\n } else {\n let defaultError = defaultErrorMessageDict[s.calleeName] ?? '';\n let index = 0;\n while (defaultError && defaultError.indexOf(`{args}`) !== -1) {\n defaultError = defaultError.replace(\n `{args}`,\n `\\${${getRuntimeStr(s.arguments[index], callbackBag)}}`\n );\n index++;\n }\n // const itemTitle = (s?.parentNode as any)?.parentNode?.bindAttrs?.find((item: BindAttribute) => item.name === 'label');\n // let labelName;\n // if (itemTitle?.expression) {\n // labelName = `\\${${itemTitle?.expression?.toVue()}}`;\n // } else {\n // labelName = itemTitle?.value || '表单项';\n // }\n // defaultError = defaultError && defaultError.replace(`{label}`, labelName);\n if (defaultError?.includes(`{label}`)) {\n return todo();\n }\n if (s.frontend?.i18nInfo?.enabled) {\n defaultError = '$' + `{$i18n.t('${s.i18nKeyPrefix}${s.calleeName}')}`;\n }\n code += `message: \\`${defaultError}\\`,`;\n }\n code += `trigger: 'input+blur'`;\n if (['required', 'filled', 'notEmpty'].includes(s.calleeName)) {\n code += ',required: true';\n }\n code += '}';\n return code;\n } else if (isArgument(s)) {\n let code = '';\n if (s.expression) {\n const resultCode = getRuntimeStr(s.expression, callbackBag);\n code += resultCode;\n } else {\n code += 'undefined';\n }\n return s.spread ? `...${code}` : `${code}`;\n } else if (isAnchor(s)) {\n if (s.expression) {\n return getRuntimeStr(s.expression, callbackBag);\n } else {\n return '';\n }\n } else if (isJSBlock(s)) {\n return s.code;\n } else if (isJavaLogic(s)) {\n return neverImplemented();\n } else if (isBlock(s)) {\n const items = s.logicItems.map((x) => getRuntimeStr(x, callbackBag)).join('\\n');\n return `{${items}}`;\n } else if (isIdentifier(s)) {\n const { namespace } = s;\n if (namespace) {\n if (s.isFrontendVariables) {\n const member = MemberExpression.from(\n {\n object: new Identifier({ name: '$frontendVariables' }),\n property: new Identifier({ name: s.name }),\n },\n s.parentNode,\n s.parentKey\n );\n return getRuntimeStr(member, callbackBag);\n } else if (s.isEnum()) {\n let enumName = s.name;\n if (namespace.startsWith('extensions.')) {\n enumName = `${namespace}.${s.name}`;\n }\n return enumName;\n } else if (namespace.endsWith('configuration.groups.custom.properties')) {\n // 配置参数\n return `\"${namespace}.${s.name}\"`;\n } else if (namespace.endsWith('logics')) {\n return `'${namespace}.${s.name}'`;\n }\n }\n return (\n callbackBag?.resolve?.({\n kind: 'identifier',\n value: s,\n }) ?? s.name\n );\n } else if (isNullLiteral(s)) {\n return `null`;\n } else if (isBooleanLiteral(s)) {\n return s.value;\n } else if (isStringLiteral(s)) {\n // 转义\n let code = ``;\n const stringCode = `${JSON.stringify(s.value)}`;\n if (s.i18nKey && s.value && s.frontend?.i18nInfo?.enabled) {\n code = `$i18n.t('${s.i18nKey}')`;\n } else if (s.i18nKey && s.getAncestor('BusinessComponent')) {\n // 业务组件的tojs比较 特殊,读不到别的信息,也不想专门传递端过来\n // 所以就判断 真正渲染的时候,当前这个端的国际化开关是否开启了,开了就读国际化文本,没开就是原来的\n code = `($global?.i18nInfo?.enabled ? $i18n.t('${s.i18nKey}') : ${stringCode})`;\n } else if (typeof s.value === 'string') {\n code = stringCode;\n }\n return code;\n\n // return `${JSON.stringify(s.value)}`;\n } else if (isStringInterpolation(s)) {\n // TODO wudengke 修复window.xxxx方法,构造统一的CallFunction调用然后处理成为nasl.xxx\n if (!s.expressions.length) return `''`;\n return s.expressions\n .map((exp) => {\n const expTypeAnnotation = exp.typeAnnotation || exp.__TypeAnnotation;\n transformUnionTypeAnnotation(expTypeAnnotation, s.app);\n const { sortedTypeKey } = transfromMetadataType(expTypeAnnotation, s.app);\n return `nasl.util.ToString('${sortedTypeKey}', ${getRuntimeStr(exp, callbackBag)})`;\n })\n .join(' + ');\n } else if (isNumericLiteral(s)) {\n return s.value;\n } else if (isBinaryExpression(s)) {\n // FIXME wudengke 二元表达式翻译行为和Vue保持一致\n return `${getRuntimeStr(s.left, callbackBag)}${s.operator}${getRuntimeStr(\n s.right,\n callbackBag\n )}`;\n } else if (isMatchCase(s)) {\n const p = s.parentNode;\n if (!isMatch(p)) {\n throw new Error('MatchCase的父节点非Match');\n }\n let code = '';\n if (Array.isArray(s.patterns)) {\n const patternStrArr = s.patterns.map((pattern) => {\n if (isTypeAnnotation(pattern)) {\n return `window.$isInstanceOf(${getRuntimeStr(p.expression, callbackBag)}, '${\n pattern.sortedTypeKey\n }')`;\n } else {\n return `window.$global.isEqual(${getRuntimeStr(\n p.expression,\n callbackBag\n )}, ${getRuntimeStr(pattern, callbackBag)})`;\n }\n });\n const patternStr = patternStrArr.join('||');\n const length = p.cases.length;\n if (length > 1) {\n const index = p.cases.indexOf(s);\n if (index === -1) {\n throw new Error('无法在Match中找到此MatchCase');\n }\n if (index === 0) {\n code = `if (${patternStr}) {\\n`;\n } else if (index !== length - 1) {\n code = `else if (${patternStr}) {\\n`;\n } else {\n code += 'else {\\n';\n }\n }\n if (Array.isArray(s.body)) {\n s.body.forEach((logicItem, bodyIndex) => {\n if (\n (s.parentNode as any).isExpression &&\n bodyIndex === s.body.length - 1 &&\n logicItem.concept !== 'Abort'\n ) {\n code += `return `;\n }\n code += `${getRuntimeStr(logicItem, callbackBag)}\\n`;\n });\n }\n if (length > 1) {\n code += '}\\n';\n }\n }\n return code;\n } else if (isMatch(s)) {\n let code = '';\n const ancestorLogic = s.getAncestor('Logic');\n if (s.isExpression || !ancestorLogic) {\n if (ancestorLogic) {\n code += 'await (async () => {\\n';\n } else {\n code += '(() => {\\n';\n }\n }\n if (s.expression && Array.isArray(s.cases)) {\n s.cases.forEach((item, index) => {\n code += getRuntimeStr(item, callbackBag);\n });\n }\n if (s.isExpression || !ancestorLogic) {\n code += '})()';\n }\n return code;\n } else if (isUnaryExpression(s)) {\n const arg = getRuntimeStr(s.argument, callbackBag);\n if (s.operator === 'isNull') {\n return arg;\n } else {\n return `!(${arg})`;\n }\n } else if (isMemberExpression(s)) {\n // 处理从enums上取值的情形\n if (isIdentifier(s.object) && s.object.isEnum() && isIdentifier(s.property)) {\n return getRuntimeStr(new StringLiteral({ value: s.property.name }), callbackBag);\n }\n const optional = callbackBag?.shouldInsertOptional === false ? '' : '?';\n return `${getRuntimeStr(s.object, callbackBag)}${optional}.${getRuntimeStr(s.property)}`;\n } else if (isUnparsed(s)) {\n return s.code;\n } else if (isNew(s)) {\n // 抽象类,无翻译\n return '';\n } else if (isNewComposite(s)) {\n // 迁移自Vue翻译\n let code = '';\n const { typeAnnotation } = s;\n const leftTopIndex = s.assignmentLines.findIndex(\n ({ leftIndex }) => leftIndex[1] === undefined\n );\n if (!s.typeAnnotation) {\n return '';\n }\n // 祖先逻辑\n const ancestorLogic = s.getAncestor('Logic');\n if (ancestorLogic) {\n code += 'await (async () => { \\n';\n } else {\n code += '(() => { \\n';\n }\n if (leftTopIndex !== -1) {\n const { rightIndex } = s.assignmentLines[leftTopIndex];\n const obj =\n rightIndex[1] !== undefined\n ? s.rights[rightIndex[0]].members[rightIndex[1]]\n : s.rights[rightIndex[0]].expression;\n code += `return ${getRuntimeStr(obj, callbackBag)};\\n`;\n } else if (typeAnnotation && typeAnnotation.typeKind !== 'anonymousStructure') {\n code += `const obj = genInitFromSchema('${\n typeAnnotation.sortedTypeKey\n }', nasl.util.New(${typeAnnotation.toJS()}));\\n`;\n const rightMap = new Map();\n s.assignmentLines.forEach(({ leftIndex, rightIndex }) => {\n const rightIndexJson = JSON.stringify(rightIndex);\n if (rightMap.has(rightIndexJson)) {\n rightMap.set(rightIndexJson, [...rightMap.get(rightIndexJson), leftIndex]);\n } else {\n rightMap.set(rightIndexJson, [leftIndex]);\n }\n });\n rightMap.forEach((leftIndexs, rightIndexJson) => {\n const rightIndex = JSON.parse(rightIndexJson) || [];\n const leftItems = leftIndexs.map(\n (leftIndex: Array<number>) => s.properties[leftIndex[1]]\n );\n const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];\n const rightItem =\n rightSecond !== undefined\n ? s.rights[rightFirst].members[rightSecond]\n : s.rights[rightFirst].expression;\n leftItems.forEach((leftItem: Identifier) => {\n code += `obj.${leftItem.name} = `;\n });\n code += `${getRuntimeStr(rightItem, callbackBag)}`;\n code += ';\\n';\n });\n code += 'return obj;\\n';\n } else {\n code += `const obj = {};\\n`;\n s.properties.forEach((property) => {\n code += `obj.${property.name} = null;\\n`;\n });\n const rightMap = new Map();\n s.assignmentLines.forEach(({ leftIndex, rightIndex }) => {\n const rightIndexJson = JSON.stringify(rightIndex);\n if (rightMap.has(rightIndexJson)) {\n rightMap.set(rightIndexJson, [...rightMap.get(rightIndexJson), leftIndex]);\n } else {\n rightMap.set(rightIndexJson, [leftIndex]);\n }\n });\n rightMap.forEach((leftIndexs, rightIndexJson) => {\n const rightIndex = JSON.parse(rightIndexJson) || [];\n const leftItems = leftIndexs.map(\n (leftIndex: Array<number>) => s.properties[leftIndex[1]]\n );\n const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];\n const rightItem =\n rightSecond !== undefined\n ? s.rights[rightFirst].members[rightSecond]\n : s.rights[rightFirst].expression;\n leftItems.forEach((leftItem: Identifier) => {\n code += `obj.${leftItem.name} = `;\n });\n code += `${getRuntimeStr(rightItem, callbackBag)}`;\n code += ';\\n';\n });\n code += 'return obj;\\n';\n }\n code += '})()';\n return code;\n } else if (isNewList(s)) {\n let code = '';\n if (s.getAncestor?.('Logic')) {\n code += 'await (async () => { \\n';\n } else {\n code += '(() => { \\n';\n }\n code += 'const arr = [\\n';\n s.items.forEach((item, index) => {\n code += getRuntimeStr(item, callbackBag);\n if (index + 1 < s.items.length) code += ', ';\n });\n code += '\\n];\\n';\n code += `return arr;\\n`;\n code += '})()';\n return code;\n } else if (isNewMap(s)) {\n let code = '';\n if (s.getAncestor?.('Logic')) {\n code += 'await (async () => { \\n';\n } else {\n code += '(() => { \\n';\n }\n code += 'const obj = {};\\n';\n code += 'let k;\\n';\n s.keys.forEach((item, index) => {\n const key = item;\n const value = s.values[index];\n code += `k = `;\n code += `${key ? getRuntimeStr(key, callbackBag) : undefined};\\n`;\n code += 'obj[k] = ';\n code += `${value ? getRuntimeStr(value, callbackBag) : undefined};\\n`;\n });\n code += `return obj;\\n`;\n code += '})()';\n return code;\n } else if (isCallEvent(s)) {\n const { completeArguments = [] } = s;\n let code = '';\n code += `props?.on${capitalizeFirstLetter(s.calleeName)}({\\n`;\n if (Array.isArray(completeArguments) && completeArguments.length) {\n const eventNode = s.getCallNode();\n const eventParams = eventNode?.params;\n completeArguments.forEach((arg, index) => {\n let argStr = getRuntimeStr(arg, callbackBag);\n const defaultValue = eventParams?.[index]?.defaultValue;\n if (defaultValue) {\n const paramDefaultValue = getRuntimeStr(defaultValue, callbackBag);\n if (paramDefaultValue) {\n argStr = `${argStr} !== undefined ? ${argStr} : ${paramDefaultValue}`;\n }\n }\n code += `${arg.keyword}: ${argStr}`;\n if (index !== completeArguments?.length - 1) {\n code += ', ';\n }\n });\n }\n code += '\\n})';\n return code;\n } else if (isCallQueryComponent(s)) {\n return neverImplemented();\n } else if (isQueryFromExpression(s)) {\n return neverImplemented();\n } else if (isQueryJoinExpression(s)) {\n return neverImplemented();\n } else if (isQueryFieldExpression(s)) {\n return neverImplemented();\n } else if (isQueryAggregateExpression(s)) {\n return neverImplemented();\n } else if (isQueryOrderByExpression(s)) {\n return neverImplemented();\n } else if (isQueryGroupByExpression(s)) {\n return neverImplemented();\n } else if (isQuerySelectExpression(s)) {\n return neverImplemented();\n } else if (isQueryLimitExpression(s)) {\n return neverImplemented();\n } else if (isSqlQueryComponent(s)) {\n return neverImplemented();\n } else if (isOqlQueryComponent(s)) {\n return neverImplemented();\n } else if (isProcessOutcome(s)) {\n return neverImplemented();\n } else if (isAssignee(s)) {\n return neverImplemented();\n } else if (isProcessOutcomes(s)) {\n return neverImplemented();\n } else {\n // 未被处理的情形\n if (s) {\n logger.warn(`Concept:${s.concept} 未被处理,回退至默认翻译,请报告此错误`);\n return s.toJS();\n } else {\n logger.error('遇到空节点,请报告此错误');\n return '(undefined)';\n }\n }\n }\n}\n\nexport type IdentifierResolver = (id: Identifier) => string | undefined;\nexport type IdentifierNameResolver = (id: string) => string | undefined;\n\nexport const javaScriptCodeGenPlugin = makePlugin({\n name: 'javaScriptCodeGen',\n functions: {\n printSyntaxNode(\n expr: HasRuntimeSemantics,\n callbackBag?: Partial<javaScriptCodeGenCallBackBag>\n ) {\n return getRuntimeStr(expr, callbackBag);\n },\n },\n});\n\n/**\n * JavaScript 代码生成插件\n *\n * @public\n */\n@injectable()\nexport class JavaScriptCodegenPlugin implements JavaScriptDomain.JavaScriptCodegen {\n printSyntaxNode(expr: HasRuntimeSemantics, callbackBag?: Partial<javaScriptCodeGenCallBackBag>) {\n return getRuntimeStr(expr, callbackBag);\n }\n}\n","export const defaultErrorMessageDict: Record<string, string | undefined> = {\n \"required\": \"表单项不得为空\",\n \"filled\": \"表单项不得为空\",\n \"notEmpty\": \"表单项不得为空\",\n \"empty\": \"表单项必须为空\",\n \"minLength\": \"不得少于{args}个字符\",\n \"maxLength\": \"不得超过{args}个字符\",\n \"rangeLength\": \"请输入{args}-{args}个字符\",\n \"min\": \"不能小于{args}\",\n \"max\": \"不能大于{args}\",\n \"range\": \"范围在{args}-{args}之间\",\n \"pattern\": \"表单项格式不正确\",\n \"is\": \"必须与{args}相同\",\n \"isNot\": \"必须与{args}不同\",\n \"equals\": \"必须等于{args}\",\n \"notEquals\": \"必须不等于{args}\",\n \"confirmed\": \"两次输入的密码不一致\",\n \"includes\": \"必须包含{args}\",\n \"excludes\": \"不能包含{args}\",\n \"included\": \"必须为{args}中的值\",\n \"excluded\": \"不能为{args}中的值\",\n \"unique\": \"该表单项已经存在\",\n \"noDuplicates\": \"不能出现重复项\",\n \"string\": \"请输入字符串\",\n \"number\": \"请输入数字\",\n \"numeric\": \"请输入数字\",\n \"integer\": \"请输入整数\",\n \"decimal\": \"请输入正确格式的小数\",\n \"boolean\": \"必须为布尔类型\",\n \"function\": \"必须为函数\",\n \"object\": \"必须为对象\",\n \"plainObject\": \"必须为简单对象\",\n \"array\": \"必须为数组\",\n \"alpha\": \"请输入字母\",\n \"alphaNum\": \"请输入字母或数字\",\n \"alphaDash\": \"请输入字母或下划线\",\n \"alphaNumDash\": \"请输入字母、数字或下划线\",\n \"alphaSpaces\": \"以字母或空格组成\",\n \"lowerCase\": \"不能出现大写字母\",\n \"upperCase\": \"不能出现小写字母\",\n \"^az\": \"以小写字母开头\",\n \"^az09\": \"以小写字母或数字开头\",\n \"^az09_\": \"以小写字母、数字或下划线开头\",\n \"^azAZ\": \"以字母开头\",\n \"^azAZ09\": \"以字母或数字开头\",\n \"^azAZ09_\": \"以字母、数字或下划线开头\",\n \"az09$\": \"以小写字母或数字结尾\",\n \"azAZ09$\": \"以字母或数字结尾\",\n \"^09$\": \"以数字组成\",\n \"^az09$\": \"以小写字母或数字组成\",\n \"^az09-$\": \"以小写字母、数字或中划线组成\",\n \"^az09-.$\": \"以小写字母、数字、'-'或'.'组成\",\n \"^azAZ09$\": \"以字母或数字组成\",\n \"^azAZ09-$\": \"以字母、数字或'-'组成\",\n \"^az09-_$\": \"以小写字母、数字、'-'或'_'组成\",\n \"^azAZ09_$\": \"以字母、数字或'_'组成\",\n \"^azAZ09-_$\": \"以字母、数字、'-'或'_'组成\",\n \"without--\": \"不能连续出现中划线\",\n \"without__\": \"不能连续出现下划线\",\n \"email\": \"请输入正确的邮箱\",\n \"ip\": \"请输入正确的 IP\",\n \"ipRange\": \"请输入正确的 IP 段\",\n \"port\": \"请输入正确的端口\",\n \"url\": \"请输入正确的 URL\",\n \"macAddress\": \"请输入正确的 MAC 地址\",\n \"md5\": \"请输入正确的 MD5\",\n \"ascii\": \"必须为 ASCII\",\n \"base32\": \"必须为 base32 编码\",\n \"base64\": \"必须为 base64 编码\",\n \"byteLength\": \"字节长度不在指定范围内\",\n \"dataURI\": \"必须为 DataURI 编码\",\n \"magnetURI\": \"必须为 MagnetURI 编码\",\n \"divisibleBy\": \"必须被{args}整除\",\n \"fullWidth\": \"必须输入全角字符\",\n \"halfWidth\": \"必须输入半角字符\",\n \"hash\": \"哈希编码不符合{args}算法\",\n \"hexColor\": \"请输入合法的十六进制颜色值\",\n \"hex\": \"请输入十六进制数\",\n \"identityCard\": \"请输入合法的身份证号码\",\n \"creditCard\": \"请输入合法的信用卡号\",\n \"fqdn\": \"请输入合法的全限定域名\",\n \"ipOrFQDN\": \"请输入一个合法 IP 或全限定域名\",\n \"isbn\": \"必须为合法的国际标准书号\",\n \"issn\": \"必须为合法的国际标准连续出版物编号\",\n \"isin\": \"必须为合法的国际证券识别码\",\n \"iso8601\": \"必须为合法的 ISO8601 日期格式\",\n \"rfc3339\": \"必须为合法的 RFC3339 日期格式\",\n \"iso31661Alpha2\": \"必须为合法的 ISO 3166-1 Alpha-2 国家代码\",\n \"iso31661Alpha3\": \"必须为合法的 ISO 3166-1 Alpha-3 国家代码\",\n \"json\": \"必须为 JSON 格式字符串\",\n \"jwt\": \"必须为合法的 JSON Web Token\",\n \"latLong\": \"请输入合法的经纬度坐标,如 (-17.738223, 85.605469)\",\n \"mobile\": \"请输入合法的手机号码\",\n \"mongoId\": \"请输入合法的 MongoDB 对象 ID\",\n \"postalCode\": \"请输入合法的邮政编码\",\n \"uuid\": \"请输入合法的 UUID\",\n \"chinese\": \"请输入中文内容\"\n}\n","import {\n type App, BaseNode,\n type FrontendType,\n type CallLogic,\n type SyntaxNode,\n type Logic,\n asserts,\n} from '@lcap/nasl-concepts';\n\nclass LogNode extends BaseNode {\n\n get concept(){\n return 'LogNode'\n };\n __actualNode: CallLogic;\n __path: string;\n __logic: Logic;\n\n constructor(source: CallLogic) {\n super();\n if (source) {\n this.__path = source.nodePath;\n this.__logic = source.getAncestor?.('Logic') as Logic;\n this.__actualNode = source;\n }\n }\n\n toJS() {\n if (this.__actualNode) {\n let code = this.__actualNode.toJS();\n const message = this.__actualNode.arguments?.[0]?.toJS();\n const calleeName = this.__actualNode.calleeName;\n code += `\\nthis.$logReport({\n logicName: '${this.__logic?.name}',\n path: '${this.__path}',\n level: '${calleeName}',\n message: ${message},\n });`;\n return code;\n }\n return '';\n }\n\n getActualNode() {\n return this.__actualNode;\n }\n}\n\n/**\n * 日志节点\n * @param node\n * @returns\n */\nfunction isCallLogicALogNode(node: SyntaxNode) {\n return asserts.isCallLogic(node)\n && node.calleeNamespace === 'nasl.logging'\n && ['ERROR', 'WARN', 'DEBUG', 'INFO'].includes(node.calleeName);\n}\n\nexport function isLogNode(node: BaseNode): node is LogNode {\n return node.concept === 'LogNode';\n}\n\nexport const genLogs = (app: App) => {\n app.frontendTypes.forEach((frontendType: FrontendType) => {\n frontendType.traverseStrictChildren((node: SyntaxNode) => {\n if (isCallLogicALogNode(node)) {\n const { parentNode, parentKey } = node;\n const logNode = new LogNode(node as CallLogic);\n logNode.parentNode = parentNode;\n if (Array.isArray(parentNode[parentKey as keyof SyntaxNode])) {\n const index = parentNode[parentKey as keyof SyntaxNode].indexOf(node);\n if (index !== -1) {\n parentNode[parentKey as keyof SyntaxNode][index] = logNode;\n }\n } else {\n (parentNode as any)[parentKey] = logNode;\n }\n }\n });\n });\n};\n\nexport const clearLogs = (app: App) => {\n app.frontendTypes.forEach((frontendType: FrontendType) => {\n frontendType.traverseChildren((node: BaseNode) => {\n if (node instanceof LogNode) {\n const actualNode = node.getActualNode();\n if (isCallLogicALogNode(actualNode)) {\n const { parentNode, parentKey } = actualNode;\n if (Array.isArray(parentNode[parentKey as keyof SyntaxNode])) {\n const index = parentNode[parentKey as keyof SyntaxNode].indexOf(node);\n if (index !== -1) {\n parentNode[parentKey as keyof SyntaxNode][index] = actualNode;\n }\n } else {\n (parentNode as any)[parentKey] = actualNode;\n }\n }\n }\n });\n });\n};\n\nexport const commonlogReportCode = `\nconst $logReport = ({\n level,\n path,\n logicName,\n message,\n}) => {\n try {\n fetch('api/system/logReport', {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n time: '' + Date.now(),\n level,\n path,\n logicName,\n message,\n }),\n });\n } catch(err) {}\n};`;\n\n/**\n * 生成 日志上报 代码\n * @param param0\n * @returns\n */\nexport const logReportCode = () => {\n return `\n // 日志上报\n Vue.prototype.$logReport = ({\n level,\n path,\n logicName,\n message,\n }) => {\n try {\n fetch('api/system/logReport', {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n time: '' + Date.now(),\n level,\n path,\n logicName,\n message,\n }),\n });\n } catch(err) {}\n };`;\n};\n","import { Frontend } from '@lcap/nasl-concepts';\nimport { makePlugin } from '../../utils/plugin';\nimport { ReactFileDescription } from '../react/react-codegen-plugin';\n\nexport const i18nPlugin = makePlugin({\n name: 'i18nPlugin',\n functions: {\n genI18nInfo(frontend: Frontend) {\n let fileI18nInfo: any = {\n enabled: false,\n locale: 'zh-CN',\n messages: {},\n I18nList: [],\n };\n if (frontend?.i18nInfo?.enabled) {\n const naslI18nInfo = frontend.i18nInfo?.toJSON();\n // 因为内部还有对象嵌套,先序列化一下\n fileI18nInfo = JSON.parse(JSON.stringify(naslI18nInfo));\n fileI18nInfo.messages = fileI18nInfo.messageMap;\n delete fileI18nInfo.messageMap;\n const i18nMessages: any = fileI18nInfo.messages || {};\n // 发布前公布下最新文本翻译\n const frontEndI18nNodes = frontend.getI18nKeyNodes();\n const frontEndI18nMap: any = {};\n frontEndI18nNodes.forEach((node) => {\n frontEndI18nMap[node['i18nKey']] = node.value;\n });\n // 如果其他语言内容这里的没有设置,就复用中文的翻译\n const infoZhMessages = i18nMessages['zh-CN'];\n const AllZhMessages = { ...infoZhMessages, ...frontEndI18nMap };\n \n // 中文列表直接覆盖\n i18nMessages['zh-CN'] = AllZhMessages;\n \n // 遍历所有语言,然后把 别的语言没有的文本,赋值为中文的文本\n // 循环遍历messages,中文的message 赋值到别的语言中\n Object.keys(i18nMessages).forEach((key) => {\n if (key !== 'zh-CN') {\n const i18nMessage = i18nMessages[key];\n Object.keys(AllZhMessages).forEach((zhKey) => {\n // 如果发布的时候国际化节点存储的内容和文本的不一样,其余语言的内容都要替换成文本的内容\n // 前提是这个是nasl节点的内容\n if (frontEndI18nMap[zhKey] && infoZhMessages[zhKey] !== frontEndI18nMap[zhKey]) {\n i18nMessage[zhKey] = AllZhMessages[zhKey];\n } else if (!i18nMessage[zhKey]) {\n // 如果单纯的没配置,就用主语言的\n i18nMessage[zhKey] = AllZhMessages[zhKey];\n }\n });\n }\n });\n fileI18nInfo.I18nList = frontend.getCurrentLanguageList();\n }\n return fileI18nInfo;\n },\n __hooksDefinitions(): ReactFileDescription {\n return new ReactFileDescription(\n '',\n [],\n [],\n [\n `export const useI18n = ()=>{\n return window.$i18n ?? {};\n }\n export const useI18nInfo = ()=>{\n return window.appInfo.i18nInfo ?? {};\n }`,\n ]\n );\n },\n },\n});","import { App, Frontend } from '@lcap/nasl-concepts';\nimport { makePlugin } from '../../utils/plugin';\nimport { i18nPlugin } from './i18n-plugin';\nimport { CommonAppConfig } from '../../types/config';\nimport { Dict } from '../../types/common';\n\n// TODO wudengke 确认是否需要文件下面这些被注释掉的字段\n\nexport type BasePlatformConfig = Omit<PlatformConfig, 'authResourcePaths' | 'baseResourcePaths'>;\n\nexport interface PlatformConfig {\n appConfig: AppConfig;\n dnsAddr: string;\n tenant: string;\n env: string;\n hasUserCenter: boolean;\n hasAuth: boolean;\n authResourcePaths: string[];\n baseResourcePaths: string[];\n basePath: string;\n sysPrefixPath: string;\n frontendName: string;\n isPreviewFe: boolean;\n}\n\ninterface AppConfig {\n id: string;\n project: string;\n domainName: string;\n extendedConfig?: any;\n envConfig: {\n lowcodeDomain: string;\n };\n tenant: string;\n i18nInfo: I18nInfo;\n nuimsDomain: string | undefined;\n lowcodeDomain: string | undefined;\n envNuimsDomain: string | undefined;\n tenantType: string;\n tenantLevel: string;\n documentTitle: string;\n basePath: string;\n sysPrefixPath: string;\n frontendName: string;\n rootViewData: undefined;\n appTimeZone: string | undefined,\n}\n\ninterface I18nInfo {\n enabled: boolean;\n locale: string;\n messages: Dict;\n I18nList: unknown[];\n}\n\nexport const metadataPlugin = makePlugin({\n name: 'MetadataPlugin',\n functions: {\n makeBasePlatformConfig(\n app: Pick<App, 'name' | 'dnsAddr' | 'hasUserCenter' | 'hasAuth' | 'sysPrefixPath' | 'id' | 'appTimeZone' >,\n frontend: Frontend,\n config: CommonAppConfig\n ): BasePlatformConfig {\n const configLowcodeDomain = config?.lowcodeDomain;\n const fnNuimsDomain = config?.envNuimsDomain?.[config?.env] || config?.nuimsDomain;\n const fnLowcodeDomain =\n config?.envLcpDomain?.[config?.env]?.lcpDomain || config?.lowcodeDomain;\n return {\n appConfig: {\n id: app.id,\n project: app.name,\n domainName: app.name,\n nuimsDomain: fnNuimsDomain,\n lowcodeDomain: configLowcodeDomain,\n envNuimsDomain: config.envNuimsDomain,\n tenantType: config.tenantType,\n tenantLevel: config.tenantLevel,\n extendedConfig: config.extendedConfig,\n envConfig: {\n lowcodeDomain: fnLowcodeDomain,\n },\n tenant: config.tenant,\n documentTitle: frontend.documentTitle!,\n basePath: frontend.prefixPath,\n frontendName: frontend.name,\n sysPrefixPath: app.sysPrefixPath,\n appTimeZone: app?.appTimeZone,\n i18nInfo: i18nPlugin.functions.genI18nInfo(frontend),\n rootViewData: undefined\n },\n dnsAddr: app.dnsAddr!,\n tenant: config.tenant,\n env: config.env,\n hasUserCenter: app.hasUserCenter,\n hasAuth: app.hasAuth,\n basePath: frontend.prefixPath,\n sysPrefixPath: app.sysPrefixPath,\n frontendName: frontend.name,\n isPreviewFe: !!config.isPreviewFe,\n };\n },\n },\n});\n","export const materials = {\n framework: {\n version: '2.0.1',\n core: '@lcap/basic-template',\n pc: [\n {\n frameworkKind: 'vue2',\n name: '@lcap/pc-template',\n version: '2.0.1',\n },\n {\n frameworkKind: 'react',\n name: '@lcap/pc-template-react',\n version: '2.0.1',\n },\n {\n frameworkKind: 'vue3',\n name: '@lcap/pc-template-vue3',\n version: '2.0.1',\n }\n ],\n h5: [\n {\n frameworkKind: 'vue2',\n name: '@lcap/mobile-template',\n version: '2.0.1',\n },\n {\n frameworkKind: 'react',\n name: '@lcap/mobile-template-react',\n version: '2.0.1',\n },\n {\n frameworkKind: 'vue3',\n name: '@lcap/mobile-template-vue3',\n version: '2.0.1',\n }\n ]\n },\n ui: {\n pc: [\n {\n frameworkKind: 'vue2',\n frameworkVersion: 'vue@2.6.12',\n libName: 'CloudUI',\n useFakeRoot: '0',\n name: '@lcap/pc-ui',\n version: '1.4.0',\n },\n {\n frameworkKind: 'vue2',\n frameworkVersion: 'vue@2.6.12',\n libName: 'ElementUI',\n useFakeRoot: '0',\n name: '@lcap/element-ui',\n version: '1.4.0',\n },\n {\n frameworkKind: 'react',\n frameworkVersion: 'react@18.2.0',\n libName: 'antd',\n name: '@lcap/pc-react-ui',\n version: '1.4.0',\n },\n {\n frameworkKind: 'vue3',\n frameworkVersion: 'vue@3.5.13',\n libName: 'ElementPlus',\n name: '@lcap/element-plus',\n version: '1.0.0',\n }\n ],\n h5: [\n {\n frameworkKind: 'vue2',\n frameworkVersion: 'vue@2.6.12',\n name: '@lcap/mobile-ui',\n libName: 'vant',\n useFakeRoot: '0',\n version: '1.4.0',\n },\n {\n frameworkKind: 'vue3',\n frameworkVersion: 'vue@3.5.13',\n name: '@lcap/vant',\n libName: 'LcapVant',\n version: '1.0.0-beta.1',\n }\n ]\n },\n mini: {\n taro: [\n {\n frameworkKind: 'vue2',\n frameworkVersion: 'vue@2.6.12',\n name: '@lcap/taro-mini-vue2',\n version: '0.0.1',\n }\n ]\n }\n};\n","import { Package } from '../../types/ir';\nimport { materials as materialConfigObject } from './material.config';\n\nconst reactUi = materialConfigObject.ui.pc.find((x) => x.frameworkKind === 'react');\nconst vue3Ui = materialConfigObject.ui.pc.find((x) => x.frameworkKind === 'vue3');\n// 约定coreVresion为materialConfigObject.framework.version\nconst coreVersion = materialConfigObject.framework.version;\n\n/**\n * @deprecated material.config.js应当需要前端传过来。翻译器中通过插件来取值。\n */\nexport function getPredefinedMaterialConfig() {\n return materialConfigObject;\n}\n\nexport const getPredefinedMaterialByTags = (() => {\n const materialConfig = getPredefinedMaterialConfig();\n // 拍平加tag\n let allMaterials = [];\n\n allMaterials.push({\n name: materialConfig.framework.core,\n version: materialConfig.framework.version,\n tags: ['template', 'core'],\n });\n\n materialConfig.framework.pc.forEach((item) => {\n allMaterials.push({\n ...item,\n tags: ['template', 'pc', item.frameworkKind],\n });\n });\n\n materialConfig.framework.h5.forEach((item) => {\n allMaterials.push({\n ...item,\n tags: ['template', 'h5', item.frameworkKind],\n });\n });\n\n materialConfig.ui.pc.forEach((item) => {\n allMaterials.push({\n ...item,\n kind: 'standard',\n tags: ['ui', 'pc', item.frameworkKind, item.libName],\n });\n });\n\n materialConfig.ui.h5.forEach((item) => {\n allMaterials.push({\n ...item,\n kind: 'standard',\n tags: ['ui', 'h5', item.frameworkKind, item.libName],\n });\n });\n\n return (tags: string[]) => {\n return allMaterials.find((item) => tags.every((tag) => item.tags.includes(tag)));\n };\n})();\n","import { Container, inject, injectable } from 'inversify';\nimport { App, Frontend } from '@lcap/nasl-concepts';\nimport { type JavaScriptDomain, type NASLDomain } from '../../../service-interface';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { NASLAppIR } from '../../../types/ir';\nimport { CommonAppConfig } from '../../../types/config';\nimport { ReactFileDescription } from '../../react';\nimport { isNotNil } from '../../../utils/types';\n\n/**\n * 前端入口插件\n */\n@injectable()\nexport class EntrypointPlugin\n implements\n JavaScriptDomain.FrontendApplicationDomain.EntrypointManager,\n NASLDomain.IRPreProcesser\n{\n constructor(\n @inject(ServiceMetaKind.MicroFrontendManager)\n private microFrontendManager: JavaScriptDomain.FrontendApplicationDomain.MicroFrontendManager\n ) {}\n\n preProcess(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig\n ): { app: App; frontend: Frontend; config: CommonAppConfig } {\n const isReact = app?.frontendTypes?.some((x) => {\n return x.frameworkKind === 'react';\n });\n // react 框架需要前端事件包装组件\n config.needFrontendEventWrapper = isReact;\n return { app, frontend, config };\n }\n\n generateHelperCode(): ReactFileDescription {\n const code = `\nlet root: any = null;\n\nexport function renderApp() {\n // @ts-expect-error\n const container = window.LcapMicro?.container ?? document.getElementById('app')!;\n root = ReactDOM.createRoot(container);\n // @ts-expect-error\n window.createLcapApp = renderApp;\n // @ts-expect-error\n window.appVM = {\n $destroy: unmountApp,\n };\n root.render(<App />);\n}\n\nexport function unmountApp(){\n // @ts-expect-error\n window.appVM = null;\n // @ts-expect-error\n window.createLcapApp = null;\n root?.unmount();\n root = null;\n}\n\nexport function loadAssets(){\n return renderApp();\n}\n `;\n return new ReactFileDescription(\n 'helper',\n [\n {\n from: 'react',\n import: 'React',\n },\n {\n from: 'react-dom/client',\n import: 'ReactDOM',\n },\n {\n from: '../Router',\n import: 'App',\n },\n ],\n [],\n [code],\n [{ name: 'entry' }]\n );\n }\n\n generateEntry(ir: NASLAppIR): ReactFileDescription[] {\n const entryScript = this.microFrontendManager.produceScript(ir);\n const publicPathScript = this.microFrontendManager.producePublicPathScript(ir);\n const code = `\n export function startApp(){\n if(window.LcapMicro){\n // 已经被加载于微前端环境\n renderApp();\n }else{\n const loadAssets = renderApp;\n ${entryScript};\n }\n }\n `;\n\n const imports = [\n {\n from: '../init',\n },\n {\n from: './helper',\n import: '{renderApp}',\n },\n publicPathScript\n ? {\n from: './public-path',\n }\n : undefined,\n ].filter(isNotNil);\n\n return [\n new ReactFileDescription('index', imports, [], [code], [{ name: 'entry' }]),\n this.generateHelperCode(),\n publicPathScript\n ? new ReactFileDescription('public-path', [], [], [publicPathScript], [{ name: 'entry' }])\n : undefined,\n ].filter(isNotNil) as ReactFileDescription[];\n }\n static install(c: Container) {\n c.bind(ServiceMetaKind.EntryPointManager).to(EntrypointPlugin);\n c.bind(ServiceMetaKind.IRPreProcesser).to(EntrypointPlugin);\n return c;\n }\n}\n","import '@abraham/reflection';\nimport { App, Frontend } from '@lcap/nasl-concepts';\nimport { inject, injectable, type Container } from 'inversify';\nimport {\n type Generator,\n type GeneratorInfrastructureDomain,\n type JavaScriptDomain,\n type NASLDomain,\n} from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { CommonAppConfig } from '../../types/config';\nimport {\n deserializeAppWhileKeepTypeAnnotation,\n serializeAppWithKeepTypeAnnotation,\n} from '../../utils/serialization';\nimport { NASLAppIRBuilderPlugin } from '../ir-builder-plugin';\nimport { FileSystemPlugin } from '../misc/file-system/file-system-plugin';\nimport { MicroFrontendPlugin } from '../misc/micro-frontend/micro-frontend-plugin';\nimport { OrganizedFile, ProjectOrganizerPlugin } from '../misc/project-organization-plugin';\nimport { FrontendBundlerConfigPlugin } from '../misc/frontend-bundler-config-plugin';\nimport { FrontendPerformancePlugin } from '../misc/frontend-performance-plugin';\nimport { NpmPackageJSONManagerPlugin } from '../misc/npm-package-manager-plugin';\nimport { ReactCodegenPlugin } from './react-codegen-plugin';\nimport { ReactRelatedJavaScriptCodegenPlugin } from './react-javascript-codegen-plugin';\nimport { JavaScriptCodegenPlugin } from '../language/javascript-codegen-plugin';\nimport { ReactStateManagerVanillaPlugin } from './react-state-manager-vanilla-plugin';\nimport { ReactStateManagerMobxPlugin } from './react-state-manager-mobx-plugin';\nimport { EntrypointPlugin } from '../misc/entry-point/entry-point-plugin';\nimport { ReactSlotPlugin } from './react-slot-plugin';\nimport { BundlerConfigDataPlugin } from '../misc/bundler/bundler-config-data-plugin';\nimport { RspackConfigPlugin } from '../misc/bundler/rspack-config-plugin';\n\n@injectable()\nexport class ReactPresetPlugin implements Generator.NASLTranspiler {\n constructor(\n @inject(ServiceMetaKind.IRBuilder) private irBuilder: NASLDomain.IRBuilder,\n @inject(ServiceMetaKind.MicroFrontendManager)\n private microFrontendManager: JavaScriptDomain.FrontendApplicationDomain.MicroFrontendManager,\n @inject(ServiceMetaKind.FileSystemProvider)\n private fileSystemProvider: GeneratorInfrastructureDomain.FileSystemProvider,\n @inject(ServiceMetaKind.ReactCodegen)\n private reactCodeGenerator: JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactCodegen,\n @inject(NpmPackageJSONManagerPlugin)\n private npmPackageJSONManager: NpmPackageJSONManagerPlugin\n ) {}\n\n async transpile(instruction: {\n app: App;\n frontend: Frontend;\n config: CommonAppConfig;\n baseDir: string;\n }): Promise<OrganizedFile[]> {\n const appJson = serializeAppWithKeepTypeAnnotation(instruction.app);\n try {\n const app = deserializeAppWhileKeepTypeAnnotation(appJson);\n const frontend = app.findNodeByPath(instruction.frontend.nodePath) as Frontend;\n const ir = this.irBuilder.buildIR(app, frontend, instruction.config);\n const entryScript = this.microFrontendManager.produceScript(ir);\n const files = await this.reactCodeGenerator.genFiles(ir, instruction.baseDir);\n const isDebug = instruction.config.debug;\n const finalizedFiles = [\n ...files,\n // TODO wudengke 抽象为插件\n {\n path: '/client-lazyload-template.js',\n content: `\n export default function (templateParameters) {\n const { htmlWebpackPlugin } = templateParameters;\n const files = htmlWebpackPlugin.files;\n const jsAssets = files.js;\n const cssAssets = files.css;\n // 如果是debug模式,加载断点调试器\n ${\n isDebug\n ? `jsAssets.push(\n '${instruction.config.STATIC_URL}/packages/vue@2/dist/vue.min.js',\n '${\n instruction.config.STATIC_URL\n }/packages/@lcap/breakpoint-client@1.0.0/dist/index.js?time=${Date.now()}',\n );`\n : ''\n }\n const lazyLoadCommand = \\`\n \\${JSON.stringify(jsAssets)}.forEach(asset => window.LazyLoad.js(asset));\n window.LazyLoad.css(\\${JSON.stringify(cssAssets)});\n \\`;\n return \\`(function(){\n function loadAssets(){\n \\${lazyLoadCommand};\n }\n ${entryScript};\n })();\\`;\n }\n `,\n },\n ];\n\n for (const f of finalizedFiles) {\n this.fileSystemProvider.write(f.path, f.content);\n }\n return finalizedFiles;\n } catch (error) {\n throw error;\n }\n }\n static install(container: Container) {\n let c = container.createChild();\n\n // main entry\n c.bind(ServiceMetaKind.NASLTranspiler).to(ReactPresetPlugin);\n\n // basic\n c.bind(ServiceMetaKind.IRBuilder).to(NASLAppIRBuilderPlugin);\n\n // js\n c.bind(JavaScriptCodegenPlugin).toSelf();\n\n // react\n c = ReactStateManagerMobxPlugin.install(c);\n c.bind(ReactStateManagerVanillaPlugin).toSelf();\n c.bind(ServiceMetaKind.ReactJavaScriptCodePrinter).to(ReactRelatedJavaScriptCodegenPlugin);\n c.bind(ServiceMetaKind.ReactCodegen).to(ReactCodegenPlugin);\n\n // react slot\n c = ReactSlotPlugin.install(c);\n\n // misc\n c.bind(ServiceMetaKind.ProjectOrganizer).to(ProjectOrganizerPlugin);\n c.bind(ServiceMetaKind.FileSystemProvider).to(FileSystemPlugin).inSingletonScope();\n\n c = BundlerConfigDataPlugin.install(c);\n c = RspackConfigPlugin.install(c);\n c = FrontendBundlerConfigPlugin.install(c);\n c = FrontendPerformancePlugin.install(c);\n c = NpmPackageJSONManagerPlugin.install(c);\n c = MicroFrontendPlugin.install(c);\n c = EntrypointPlugin.install(c);\n return c;\n }\n}\n","import { injectable } from 'inversify';\nimport { Volume } from 'memfs';\nimport { type GeneratorInfrastructureDomain } from '../../../service-interface';\n\n/**\n * 文件系统插件\n */\n@injectable()\nexport class FileSystemPlugin implements GeneratorInfrastructureDomain.FileSystemProvider {\n private vol = new Volume();\n read(path: string): string | Buffer | undefined {\n if (this.vol.existsSync(path)) {\n return this.vol.readFileSync(path);\n }\n return undefined;\n }\n write(path: string, content: string | Buffer): void {\n this.vol.fromJSON({ [path]: content });\n }\n remove(key: string): void {\n this.vol.unlinkSync(key);\n }\n toJSON(): Record<string, string | Buffer | null> {\n return this.vol.toJSON(undefined, undefined, undefined, true);\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { type JavaScriptDomain } from '../../../service-interface';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { integrateMicroApp } from './script/microApp';\nimport { NASLAppIR } from '../../../types';\n\n/**\n * 微前端插件\n */\n@injectable()\nexport class MicroFrontendPlugin\n implements JavaScriptDomain.FrontendApplicationDomain.MicroFrontendManager\n{\n produceScript(ir: NASLAppIR): string {\n return integrateMicroApp(ir.configs.frontendDesc, ir.configs.microApp);\n }\n producePublicPathScript(ir: NASLAppIR): string | undefined {\n const framework = ir.configs.microApp?.framework;\n if (framework === 'qiankun') {\n return `\n if (window.__POWERED_BY_QIANKUN__) {\n window.__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;\n }\n `;\n } else if (framework === 'wujie') {\n return `\n if (window.__POWERED_BY_WUJIE__) {\n window.__webpack_public_path__ = window.__WUJIE_PUBLIC_PATH__;\n }\n `;\n }\n\n return undefined;\n }\n static install(c: Container) {\n c.bind(ServiceMetaKind.MicroFrontendManager).to(MicroFrontendPlugin);\n return c;\n }\n}\n","export default `\n if(window.ICESTARK && window.ICESTARK.root) {\n Object.assign(window.ICESTARK, {\n appEnter({ container, customProps }) {\n window.LcapMicro = window.LcapMicro || {};\n Object.assign(window.LcapMicro, {properties});\n\n if(window.LcapMicro.noAuthUrl && !window.LcapMicro.noAuthFn)\n window.LcapMicro.noAuthFn = () => {\n location.href = window.LcapMicro.noAuthUrl;\n };\n\n if(window.LcapMicro.loginUrl && !window.LcapMicro.loginFn)\n window.LcapMicro.loginFn = () => {\n location.href = window.LcapMicro.loginUrl;\n };\n\n if(window.LcapMicro.notFoundUrl && !window.LcapMicro.notFoundFn)\n window.LcapMicro.notFoundFn = () => {\n location.href = window.LcapMicro.notFoundUrl;\n };\n\n // 兼容 ICESTARK 旧集成方式\n if(!window.LcapMicro.loginFn)\n window.LcapMicro.loginFn = window.ICESTARK.loginFn;\n if(!window.LcapMicro.routePrefix)\n window.LcapMicro.routePrefix = window.ICESTARK.basename;\n if(!window.LcapMicro.proxyPrefix)\n window.LcapMicro.proxyPrefix = window.ICESTARK.proxyPrefix;\n\n window.LcapMicro.container = container;\n window.LcapMicro.props = customProps;\n loadAssets();\n },\n appLeave({ container }) {\n container.innerHTML = null;\n if (window.appVM) {\n window.appVM.$destroy();\n }\n document.querySelectorAll('script.lazyload').forEach((ele) => {\n ele.active = false;\n });\n },\n });\n } else {\n loadAssets();\n }\n`;\n","export default `\n window.createLcapApp = undefined;\n window.rendered = undefined;\n window.preRequest = undefined;\n window.postRequest = undefined;\n window.beforeRoute = undefined;\n window.afterRoute = undefined;\n if(window.__POWERED_BY_QIANKUN__) {\n window.LcapMicro = window.LcapMicro || {};\n Object.assign(window.LcapMicro, {properties});\n\n window[window.LcapMicro.name] = {\n bootstrap() {\n return Promise.resolve();\n },\n mount(props) {\n window.LcapMicro = window.LcapMicro || {};\n Object.assign(window.LcapMicro, {properties});\n\n if(window.LcapMicro.noAuthUrl && !window.LcapMicro.noAuthFn)\n window.LcapMicro.noAuthFn = () => {\n location.href = window.LcapMicro.noAuthUrl;\n };\n\n if(window.LcapMicro.loginUrl && !window.LcapMicro.loginFn)\n window.LcapMicro.loginFn = () => {\n location.href = window.LcapMicro.loginUrl;\n };\n\n if(window.LcapMicro.notFoundUrl && !window.LcapMicro.notFoundFn)\n window.LcapMicro.notFoundFn = () => {\n location.href = window.LcapMicro.notFoundUrl;\n };\n\n const { container } = props;\n window.LcapMicro.container = container.querySelector('#app');\n window.LcapMicro.props = props;\n if(window.createLcapApp)\n window.createLcapApp()\n else\n loadAssets();\n return Promise.resolve();\n },\n unmount({ container }) {\n window.LcapMicro.container.innerHTML = null;\n if(window.appVM){\n window.appVM.$destroy();\n }\n document.querySelectorAll('script.lazyload').forEach((ele) => {\n ele.active = false;\n })\n return Promise.resolve();\n },\n };\n } else {\n loadAssets();\n }\n`;\n","export default `\n if (window.__POWERED_BY_WUJIE__) {\n window.__WUJIE_MOUNT = () => {\n window.LcapMicro = {};\n if(window.LcapMicro.noAuthUrl && !window.LcapMicro.noAuthFn)\n window.LcapMicro.noAuthFn = () => {\n location.href = window.LcapMicro.noAuthUrl;\n };\n \n if(window.LcapMicro.loginUrl && !window.LcapMicro.loginFn)\n window.LcapMicro.loginFn = () => {\n location.href = window.LcapMicro.loginUrl;\n };\n\n if(window.LcapMicro.notFoundUrl && !window.LcapMicro.notFoundFn)\n window.LcapMicro.notFoundFn = () => {\n location.href = window.LcapMicro.notFoundUrl;\n };\n window.LcapMicro.container = document.querySelector('#app');\n window.LcapMicro.props = window.$wujie?.props;\n loadAssets();\n };\n window.__WUJIE_UNMOUNT = () => {\n window.LcapMicro.container.innerHTML = null;\n if (window.appVM) {\n window.appVM.$destroy();\n }\n document.querySelectorAll('script.lazyload').forEach((ele) => {\n ele.active = false;\n });\n };\n } else {\n loadAssets();\n }\n`;\n","// 迁移自旧代码\nimport { Frontend, MicroApp } from '@lcap/nasl-concepts';\nimport icestark from './icestark';\nimport qiankun from './qiankun';\nimport wujie from './wujie';\n\nconst frameworkOption = {\n qiankun,\n icestark,\n wujie,\n};\n\n/**\n * 获得集成微前端的脚本\n * @param frontend - 前端NASL节点\n * @returns - 返回微前端集成的脚本\n *\n * @internal\n */\nexport function integrateMicroApp(frontend: Pick<Frontend, 'basePath' | 'type'>, microApp?: MicroApp) {\n let { framework, name, routePrefix, proxyPrefix, loginUrl, noAuthUrl, notFoundUrl } = microApp || {};\n framework ||= 'icestark';\n\n if (loginUrl === `${routePrefix}${frontend.basePath}/login`) {\n loginUrl = undefined;\n }\n if (noAuthUrl === `${routePrefix}${frontend.basePath}/noAuth`) {\n noAuthUrl = undefined;\n }\n if (notFoundUrl === `${routePrefix}${frontend.basePath}/notFound`) {\n notFoundUrl = undefined;\n }\n\n const properties = JSON.stringify({\n name: name || undefined,\n routePrefix: routePrefix || undefined,\n proxyPrefix: proxyPrefix || undefined,\n loginUrl: loginUrl || undefined,\n noAuthUrl: noAuthUrl || undefined,\n notFoundUrl: notFoundUrl || undefined,\n });\n return frameworkOption[framework].replace(/\\{properties\\}/g, properties);\n}\n","import { inject, injectable } from 'inversify';\nimport { join, relative } from 'path';\nimport { type GeneratorInfrastructureDomain } from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { Logger, logging } from '../../utils/logger';\nimport { Folder, FolderPath, hasExtension as hasFileExtension } from '../../utils/path';\nimport { ensureArray } from '../../utils/types';\nimport { ImportIR, ImportIRResolver, ReactFileDescription } from '../react/react-codegen-plugin';\nimport {\n ReactRouterDefaultViewFolderName,\n ReactRouterDefaultBizComponentsFolderName,\n} from '../react/react-router-plugin';\n\nexport type OrganizedFile = { path: string; content: string; readonly organized?: unique symbol };\n\nexport type InputFile = ReactFileDescription;\n\n/**\n * 将ImportIR恒等地转换为JavaScript的import语句\n */\nconst identityImportResolver: ImportIRResolver = (s: ImportIR): string => {\n if (s.import) {\n if (s.lazy) {\n return `const ${s.import} = React.lazy(() => import('${s.from}'));`;\n }\n return `import ${s.import} from '${s.from}';`;\n }\n return `import '${s.from}';`;\n};\n\nconst logger = Logger('ProjectOrganizerPlugin');\n\n// https://vitejs.dev/config/shared-options.html#resolve-extensions\nconst ViteDefaultResolveExtensions = [\n '.mjs',\n '.js',\n '.mts',\n '.ts',\n '.jsx',\n '.tsx',\n '.json',\n] as const;\n\ntype ResolvedImport =\n | { ir: ImportIR; kind: 'absolute' }\n | { ir: ImportIR; kind: 'relative'; getRelativePathAfterMoving: () => string };\n\nfunction isIntraProjectImport(ir: ImportIR) {\n return isRelativeImport(ir) || ir.from.startsWith('/');\n}\nfunction isRelativeImport(ir: ImportIR) {\n return ir.from.startsWith('.');\n}\n\ntype WhatEverMapping = WeakMap<PlacedFile, ResolvedImport[]>;\nasync function initImport(\n config: ProjectStructureConfig\n): Promise<{ mapping: WhatEverMapping; placedFiles: PlacedFile[] }> {\n const mapping: WhatEverMapping = new WeakMap();\n const placedRegistry: Record<string, PlacedFile | null> = {};\n const placedFiles: PlacedFile[] = [];\n Object.entries(config.project).forEach(([k, v]) => {\n if (v) {\n const inputFiles = ensureArray(v);\n for (const f of inputFiles) {\n const { dir } = initFilePath(k, f);\n const source = new PlacedFile(f, dir);\n placedFiles.push(source);\n placedRegistry[source.originalAbsolutePath] = source;\n const resolvedImports = f.getImports().map((x): ResolvedImport => {\n if (isIntraProjectImport(x)) {\n const targetAbsolutePath = isRelativeImport(x) ? join(dir, x.from) : x.from;\n const ir: ResolvedImport = {\n ir: x,\n kind: 'relative',\n getRelativePathAfterMoving: () => {\n const currentDir = dir;\n const targetPath = tryToAppendExtIfNecessary() ?? targetAbsolutePath;\n logger.debug({ currentDir, targetPath });\n return `./${relative(currentDir, targetPath)}`;\n function tryToAppendExtIfNecessary() {\n if (!hasFileExtension(x.from)) {\n for (const ext of ViteDefaultResolveExtensions) {\n const temp = placedRegistry[targetAbsolutePath + ext]?.currentAbsolutePath;\n if (temp) {\n return temp;\n }\n }\n }\n return undefined;\n }\n },\n };\n return ir;\n } else {\n const obj: ResolvedImport = {\n ir: x,\n kind: 'absolute',\n };\n return obj;\n }\n });\n mapping.set(source, resolvedImports);\n }\n }\n });\n return { mapping, placedFiles };\n function decideDirForKey(key: string): FolderPath {\n const SourceFolder: Folder = { name: 'src' };\n if (key === 'views') {\n return [\n SourceFolder,\n {\n name: ReactRouterDefaultViewFolderName,\n },\n ];\n } else if (key === 'bizComponents') {\n return [\n SourceFolder,\n {\n name: ReactRouterDefaultBizComponentsFolderName,\n },\n ];\n } else {\n return [SourceFolder];\n }\n }\n\n function initFilePath(key: string, file: InputFile) {\n const rootFolderPath = decideDirForKey(key);\n file.folder = [...rootFolderPath, ...(file.folder ?? [])];\n const dir = file.getFolderPath() ?? '';\n const path = join(dir, file.fileNameWithExt);\n return { path, dir };\n }\n}\n\n/**\n * 项目结构配置\n */\nexport type ProjectStructureConfig = {\n baseDir: string;\n project: Record<string, InputFile | InputFile[]>;\n importIRResolver?: (i: ImportIR) => string;\n};\n\n/**\n * 已经被放置在文件系统中的文件\n */\nexport class PlacedFile {\n constructor(public readonly file: InputFile, private folder: string) {\n this.originalFolder = folder;\n this.currentAbsolutePath = this.originalAbsolutePath;\n }\n /**\n * 文件当前的绝对路径\n */\n currentAbsolutePath: string;\n /**\n * 文件在所有移动发生前的绝对路径\n */\n get originalAbsolutePath(): string {\n return join(this.originalFolder, this.file.fileNameWithExt);\n }\n /**\n * 文件在所有移动发生前的绝对路径\n */\n originalFolder: string;\n getFolder(): string {\n if (this.folder.endsWith('/')) {\n return this.folder;\n }\n return `${this.folder}/`;\n }\n /**\n * 移动文件到文件夹下\n */\n moveFileTo(folder: string): PlacedFile {\n this.currentAbsolutePath = new PlacedFile(this.file, folder).originalAbsolutePath;\n this.folder = folder;\n return this;\n }\n}\n\n// TODO wudengke 名字无语了\nasync function writeAllPlacedFile(\n placedMapping: WhatEverMapping,\n files: PlacedFile[],\n overwrittenImportResolver?: ImportIRResolver\n): Promise<OrganizedFile[]> {\n return Promise.all(\n files.map(async (item): Promise<OrganizedFile> => {\n const ownImportResolver = (s: ImportIR): string => {\n const newImportIR = makeNewImportIR(s);\n return overwrittenImportResolver?.(newImportIR) ?? identityImportResolver(newImportIR);\n function makeNewImportIR(s: ImportIR): ImportIR {\n const resolvedImport = placedMapping.get(item)?.find((x) => x.ir === s);\n if (resolvedImport) {\n const newImportTargetRelativePath = getResolvedImportPath(resolvedImport);\n return {\n ...s,\n from: newImportTargetRelativePath,\n };\n }\n return s;\n }\n };\n const content = await item.file.serialize(ownImportResolver);\n return {\n content,\n path: item.currentAbsolutePath,\n };\n })\n );\n function getResolvedImportPath(resolveImport: ResolvedImport): string {\n if (resolveImport.kind === 'relative') {\n return resolveImport.getRelativePathAfterMoving();\n }\n return resolveImport.ir.from;\n }\n}\n\n// TODO wudengke 这个比较简洁,用这个取代 initImport中的相关逻辑\nfunction applyDefaultProjectStructureStrategy(config: ProjectStructureConfig) {\n const placedFiles: PlacedFile[] = [];\n Object.entries(config.project).forEach(([k, v]) => {\n const inputFiles = ensureArray(v);\n if (k === 'views') {\n const placed = inputFiles.map((f) => {\n return new PlacedFile(f, join('src', 'views'));\n });\n placedFiles.push(...placed);\n } else {\n const placed = inputFiles.map((f) => {\n return new PlacedFile(f, 'src');\n });\n placedFiles.push(...placed);\n }\n });\n\n return placedFiles;\n}\n\n@injectable()\n@logging\nexport class ProjectOrganizerPlugin implements GeneratorInfrastructureDomain.ProjectOrganizer {\n constructor(\n @inject(ServiceMetaKind.FileSystemProvider)\n private fileSystemProvider: GeneratorInfrastructureDomain.FileSystemProvider\n ) {}\n async organize(config: ProjectStructureConfig): Promise<OrganizedFile[]> {\n const { mapping, placedFiles } = await initImport(config);\n await this.moveFilesAsYouWant(placedFiles);\n const files = await writeAllPlacedFile(mapping, placedFiles, config.importIRResolver);\n return files;\n }\n async moveFilesAsYouWant(placedFiles: PlacedFile[]) {\n const l = logger.child({}, { msgPrefix: '[移动文件] ' });\n for (const f of placedFiles) {\n const originalViewFolderMark = `/${ReactRouterDefaultViewFolderName}/`;\n const originalBizComponentsFolderMark = `/${ReactRouterDefaultBizComponentsFolderName}/`;\n\n if (f.originalAbsolutePath.includes(originalViewFolderMark)) {\n const to = f.getFolder().replace(originalViewFolderMark, '/pages/');\n f.moveFileTo(to);\n l.debug(`${f.originalAbsolutePath} -> ${f.currentAbsolutePath}`);\n } else if (f.originalAbsolutePath.includes(originalBizComponentsFolderMark)) {\n const to = f.getFolder().replace(originalBizComponentsFolderMark, '/components/');\n f.moveFileTo(to);\n l.debug(`${f.originalAbsolutePath} -> ${f.currentAbsolutePath}`);\n }\n }\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { ServiceMetaKind } from '../../service-metakind';\n\nexport type CompilerConfigOptions = Partial<{\n backendUrl: string;\n publicPath: string;\n aliasMapStr: string;\n}>;\n\n/**\n * 前端打包器配置插件\n * 将 backendUrl aliasMapStr publicPath 等动态信息保存到 FrontendBundlerConfigPlugin 插件中\n */\n@injectable()\nexport class FrontendBundlerConfigPlugin {\n private compilerConfig = {\n backendUrl: '',\n publicPath: '',\n aliasMapStr: '',\n };\n\n setCompilerConfig(config: CompilerConfigOptions) {\n this.compilerConfig = {\n backendUrl: config.backendUrl ?? this.compilerConfig.backendUrl,\n publicPath: config.publicPath ?? this.compilerConfig.publicPath,\n aliasMapStr: config.aliasMapStr ?? this.compilerConfig.aliasMapStr,\n };\n }\n\n getCompilerConfig() {\n return this.compilerConfig;\n }\n\n static install(c: Container) {\n c.bind(ServiceMetaKind.FrontendBundlerConfig).to(FrontendBundlerConfigPlugin).inSingletonScope();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { ServiceMetaKind } from '../../service-metakind';\n\nexport type PerformanceOptions = Partial<{ lazy: boolean; chunks: 'initial' | 'all' | 'async' }>\n\n\n/**\n * 前端制品调优插件\n * 用于外部调用来设置前端页面打包器的性能优化参数,例如页面懒加载 lazy,以及分包策略 chunks 等 \n */\n@injectable()\nexport class FrontendPerformancePlugin {\n public performanceOptions = {\n lazy: true,\n chunks: 'all',\n };\n\n setOptions(options: PerformanceOptions) {\n this.performanceOptions = {\n lazy: options.lazy ?? this.performanceOptions.lazy,\n chunks: options.chunks ?? this.performanceOptions.chunks,\n };\n }\n\n static install(c: Container) {\n c.bind(ServiceMetaKind.FrontendPerformance).to(FrontendPerformancePlugin).inSingletonScope();\n return c;\n }\n}\n","import '@abraham/reflection';\nimport { inject, injectable } from 'inversify';\nimport { type GeneratorInfrastructureDomain } from '../../../service-interface';\nimport { ServiceMetaKind } from '../../../service-metakind';\n\n/**\n * 生命周期钩子插件\n */\n@injectable()\nexport class LifeCycleHooksPlugin\n implements GeneratorInfrastructureDomain.CodeGenerationLifecycleHooks\n{\n constructor(\n @inject(ServiceMetaKind.FileSystemProvider)\n protected fileSystemProvider: GeneratorInfrastructureDomain.FileSystemProvider\n ) {}\n afterAllFilesGenerated(): void {\n // do nothing\n }\n}\n","import { GeneratorInfrastructureDomain } from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { LifeCycleHooksPlugin } from './life-cycle/life-cycle-plugin';\nimport { Logger } from '../../utils/logger';\nimport { Container, inject, injectable } from 'inversify';\nimport { merge } from 'lodash';\n\nexport type PackageJSON = Record<string, any>;\n\nconst logger = Logger('NpmPackageJSONManagerPlugin');\n\n/** */\n/**\n * package.json 定制插件\n * 用于修改 package.json 文件中的内容\n */\n@injectable()\nexport class NpmPackageJSONManagerPlugin extends LifeCycleHooksPlugin {\n constructor(\n @inject(ServiceMetaKind.FileSystemProvider)\n protected fileSystemProvider: GeneratorInfrastructureDomain.FileSystemProvider\n ) {\n super(fileSystemProvider);\n }\n\n private packageJSONPath = '/package.json';\n\n private isAfterAllFilesGenerated = false;\n\n private willMergeObject: PackageJSON = {};\n\n private readPkg(): PackageJSON | undefined {\n try {\n const pkg = this.fileSystemProvider.read(this.packageJSONPath)?.toString();\n if (pkg) {\n return JSON.parse(pkg);\n }\n } catch (error) {\n logger.error(error, '读取 package.json 文件失败');\n }\n return undefined;\n }\n\n private writePkg(pkg: PackageJSON) {\n this.fileSystemProvider.write(this.packageJSONPath, JSON.stringify(pkg, null, 2));\n }\n\n afterAllFilesGenerated(): void {\n this.isAfterAllFilesGenerated = true;\n if (Object.keys(this.willMergeObject).length > 0) {\n const pkg = this.readPkg() ?? {};\n merge(pkg, this.willMergeObject);\n this.writePkg(pkg);\n }\n }\n\n patch(obj: Record<string, any>) {\n if (!this.isAfterAllFilesGenerated) {\n merge(this.willMergeObject, obj);\n return;\n }\n const pkg = this.readPkg() ?? {};\n // recursively merge obj to pkg\n merge(pkg, obj);\n this.writePkg(pkg);\n }\n\n static install(c: Container) {\n c.bind(NpmPackageJSONManagerPlugin).toSelf().inSingletonScope();\n c.bind(ServiceMetaKind.NpmPackageJSONManager).toService(NpmPackageJSONManagerPlugin);\n c.bind(ServiceMetaKind.CodeGenerationLifecycleHooks).toService(NpmPackageJSONManagerPlugin);\n return c;\n }\n}\n","import { BaseNode } from '@lcap/nasl-concepts';\nimport { inject, injectable } from 'inversify';\nimport { JavaScriptDomain } from '../../service-interface';\nimport { JavaScriptCodegenPlugin, javaScriptCodeGenCallBackBag } from '../language/javascript-codegen-plugin';\n\n/**\n * JavaScript 与 React 相关的代码生成插件\n *\n * 因为 React 代码生成和默认的JavaScript代码生成并无不同,因此这里直接使用默认的JavaScript代码生成插件\n *\n * @public\n */\n@injectable()\nexport class ReactRelatedJavaScriptCodegenPlugin\n implements JavaScriptDomain.JavaScriptCodegen\n{\n constructor(\n @inject(JavaScriptCodegenPlugin)\n private javaScriptCodegen: JavaScriptCodegenPlugin\n ) {}\n printSyntaxNode(expr: BaseNode, callbackBag?: Partial<javaScriptCodeGenCallBackBag>): string {\n return this.javaScriptCodegen.printSyntaxNode(expr, callbackBag);\n }\n}\n","import { CallLogic, Identifier, Logic, Param } from '@lcap/nasl-concepts';\nimport {\n isLocalIndividualStateIRComponentRef,\n LocalLogicStateIR,\n StateActionIR,\n} from '../../types/state';\nimport { assertNever } from '../../utils/assert';\nimport { Logger } from '../../utils/logger';\nimport { paramToArgument } from '../../utils/syntax-node';\nimport { StateContextIR, StateManager } from '../ir-builder-plugin';\nimport { ReactFileDescription, ReactHook } from './react-codegen-plugin';\nimport { inject, injectable } from 'inversify';\nimport type { JavaScriptDomain } from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\n\nconst logger = Logger('ReactStateManagerVanilla');\n\n// FIXME wudengke 去掉这个类型\ntype TempWithCtx = (ctx: StateContextIR) => StateManager;\n\nexport class ReactHookBuilder {\n static emptyHook(): ReactHook {\n return {\n kind: 'free',\n code: ``,\n declarations: []\n };\n }\n static componentRefNameToHook(refName: string): ReactHook {\n const defaultStr = 'null';\n const code = `const ${refName}= useRef(${defaultStr});`;\n return {\n kind: 'free',\n code,\n import: {\n from: 'react',\n import: '{ useRef }',\n },\n declarations: [refName]\n };\n }\n static variableToHook(left: string, right: string): ReactHook {\n const code = `const ${left} = ${right};`;\n return {\n kind: 'free',\n code,\n declarations: [left]\n };\n }\n static componentRefsObjectToHook(refNameList: string[]): ReactHook {\n if (refNameList.length === 0) {\n return ReactHookBuilder.emptyHook();\n }\n const objectPropertiesStr = refNameList.join(',');\n const code = `const $refs = {${objectPropertiesStr}};`;\n return {\n kind: 'free',\n code,\n import: {\n from: 'react',\n import: '{ useRef }',\n },\n declarations: ['$refs']\n };\n }\n}\n\n/**\n * React 原生状态管理器\n */\n@injectable()\nexport class ReactStateManagerVanillaPlugin\n implements JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactStateManager\n{\n constructor(\n @inject(ServiceMetaKind.ReactJavaScriptCodePrinter)\n public reactJavaScriptCodegen: JavaScriptDomain.JavaScriptCodegen\n ) {}\n makeTreeStateHooks(ctx: StateContextIR): ReactHook[] {\n const treeStates = ctx.recursivelyExtractTreeStates();\n return treeStates.map((s): ReactHook => {\n switch (s.initialization.kind) {\n case 'global-hook': {\n const hookName = s.initialization.hookName;\n return {\n kind: 'free',\n code: `const ${s.identifier} = ${hookName}();`,\n import: {\n from: '/src/Hooks',\n import: `{${hookName}}`,\n },\n declarations: [s.identifier],\n };\n }\n case 'api-client': {\n return {\n kind: 'free',\n import: {\n from: '/src/apis',\n // FIXME wudengke 去掉genInitFromSchema\n import: '{apiClient, genInitFromSchema}',\n },\n code: '',\n declarations: [],\n };\n }\n case 'frontend-variable': {\n // TODO wudengke 前端全局变量的vanilla实现\n const hookName = s.initialization.hookName;\n return {\n kind: 'free',\n code: `const ${s.identifier} = ${hookName}();`,\n import: {\n from: '/src/global-variables',\n import: `{${hookName}}`,\n },\n declarations: [s.identifier],\n };\n }\n default:\n assertNever(s.initialization);\n }\n });\n }\n\n makeLocalLogicHooks(ctx: StateContextIR): ReactHook[] {\n const states = ctx.providedStates.flatMap((s): ReactHook[] => {\n const name = s.identifier;\n return [\n {\n kind: 'useState',\n declarations: [`${name}`, `use${name}`],\n initial: undefined,\n },\n ];\n });\n const actions = ctx.actions\n .filter((x) => x.kind === 'standalone')\n .flatMap((action): ReactHook[] => {\n const handlerName = action.name;\n return [\n {\n kind: 'useCallback',\n declaration: handlerName,\n deps: [],\n body: this.actionToBody(ctx, action),\n },\n ];\n });\n return [...states, ...actions];\n }\n actionToBody(ctx: StateContextIR, action: StateActionIR, getWithCtx?: () => TempWithCtx): string {\n /**\n * 根据当前action构造Logic\n * 1. 若action不包含任何逻辑则返回空Logic\n * 1. 若action包含一条逻辑,返回这条逻辑\n * 1. 若action包含多条逻辑,返回一个聚合逻辑。这个聚合逻辑负责调用多条逻辑。\n */\n function getWrappedLogic(): Logic {\n const params = action.params.map((x) => {\n return Param.from(x);\n });\n if (action.logics.length === 0) {\n return new Logic();\n } else if (action.logics.length === 1) {\n const logic = action.logics[0].logic;\n const newLogic = Logic.from({ ...logic, params });\n newLogic.body = logic.body;\n return newLogic;\n } else {\n // logics中存在多个logic。构造一个聚合logic\n const aggregatedLogic = Logic.from({\n params,\n body: action.logics.map((subLogic) => {\n const calleeName = `${subLogic.logic.name}`;\n return CallLogic.from({\n calleeName,\n arguments: action.params.map(paramToArgument),\n });\n }),\n });\n return aggregatedLogic;\n }\n }\n const wrappedLogic = getWrappedLogic();\n return `${ctx.resolveExprToString(\n wrappedLogic,\n this.reactJavaScriptCodegen,\n getWithCtx?.()?.(ctx) ?? this.withCtx(ctx)\n )}`;\n }\n makeLocalIndividualHooks(ctx: StateContextIR, getWithCtx?: () => TempWithCtx): ReactHook[] {\n const componentRefStates = ctx.providedStates.filter(isLocalIndividualStateIRComponentRef);\n const variables = ctx.providedStates.flatMap((x) => {\n if (x.kind === 'standalone' && x.initialization.kind === 'variable') {\n return [ReactHookBuilder.variableToHook(x.initialization.left, x.initialization.right)];\n }\n return [];\n });\n return [\n ...componentRefStates.map((x) => {\n return ReactHookBuilder.componentRefNameToHook(x.identifier);\n }),\n ReactHookBuilder.componentRefsObjectToHook(componentRefStates.map((x) => x.identifier)),\n ...variables,\n ...ctx.actions\n .filter((x) => x.kind === 'frontend-lifecycle')\n .flatMap((x): ReactHook[] => {\n const right = this.actionToBody(ctx, x, getWithCtx);\n const assignment = `window.${x.name} = ${right};`;\n return [\n {\n kind: 'useEffect',\n deps: [],\n body: `()=>{\n ${assignment}\n return ()=>{};\n }`,\n },\n ];\n }),\n ...ctx.actions\n .filter((x) => x.kind === 'view-lifecycle')\n .flatMap((x): ReactHook[] => {\n // TODO wudengke 根据x.name处理不同的生命周期\n // TODO wudengke 确定一下React的IDE支持哪些hook\n // Vue组件相关\n // - mounted\n // - created\n // - updated\n // - destroyed\n // 键盘相关\n // - keydown\n // - keyup\n return [\n {\n kind: 'useEffect',\n deps: [],\n body: `()=>{\n (${this.actionToBody(ctx, x, getWithCtx)})();\n return ()=>{};\n }`,\n },\n ];\n }),\n ];\n }\n initializationToExpr(\n ctx: StateContextIR,\n init: LocalLogicStateIR['initialization']\n ): string | undefined {\n if (!init) {\n return undefined;\n }\n // 根据init表达式的类型初始化\n switch (init.kind) {\n case 'static': {\n return ctx.resolveExprToString(\n init.value.expr,\n this.reactJavaScriptCodegen,\n this.withCtx(ctx)\n );\n }\n case 'url-param': {\n if (init.defaultValue?.expr) {\n return ctx.resolveExprToString(\n init.defaultValue?.expr,\n this.reactJavaScriptCodegen,\n this.withCtx(ctx)\n );\n }\n return undefined;\n }\n case 'props':\n if (init.defaultValue?.expr) {\n return ctx.resolveExprToString(\n init.defaultValue?.expr,\n this.reactJavaScriptCodegen,\n this.withCtx(ctx)\n );\n }\n return `props.${init.__raw.name}`;\n default: {\n return assertNever(init);\n }\n }\n }\n produceHooks(ctx: StateContextIR): ReactHook[] {\n const treeStateHooks = this.makeTreeStateHooks(ctx);\n const localIndividualHooks = this.makeLocalIndividualHooks(ctx);\n const localLogicHooks = this.makeLocalLogicHooks(ctx);\n // TODO wudengke 根据consumedState信息,去掉那些没有用到的hooks\n return [...treeStateHooks, ...localIndividualHooks, ...localLogicHooks];\n }\n /**\n * @deprecated 用依赖注入的方法做\n */\n withCtx(ctx: StateContextIR): StateManager {\n return {\n resolveIdentifier: (id: Identifier) => {\n return this.__resolveIdentifier(ctx, id);\n },\n resolveCalleeNamespace: (name: string) => {\n return this.__resolveName(ctx, name);\n },\n };\n }\n __resolveIdentifier(ctx: StateContextIR, id: Identifier): string | undefined {\n return this.__resolveName(ctx, id.name);\n }\n __resolveName(ctx: StateContextIR, name: string) {\n const resolvedName = resolveAsAction(name) ?? resolveAsState(name);\n if (!resolvedName) {\n logger.debug(`cannot find symbol \"${name}\" in the state context`);\n }\n return resolvedName;\n function resolveAsAction(name: string): string | undefined {\n const action = ctx.findActionByName(name);\n if (action) {\n return `${action.name}`;\n }\n }\n function resolveAsState(name: string): string | undefined {\n const state = ctx.findStateByName(name);\n if (!state) {\n return;\n }\n switch (state.kind) {\n case 'standalone':\n case 'local-logic':\n case 'tree': {\n return name;\n }\n default: {\n assertNever(state);\n }\n }\n }\n }\n __hooksDefinitions(): ReactFileDescription {\n return new ReactFileDescription(\n 'VanillaHookUtils',\n [],\n [],\n [\n `\n const useStateRef = <T extends unknown>(initialState: T) => {\nconst [state, setState] = useState(initialState);\nconst ref = useRef(initialState);\n\nuseEffect(() => {\n ref.current = state;\n}, [state]);\n\n// Use \"as const\" below so the returned array is a proper tuple\nreturn [state, setState, ref] as const;\n};\n `,\n ]\n );\n }\n}\n","import { Argument, Identifier, Param } from \"@lcap/nasl-concepts\";\n\nexport function paramToArgument(param: {name: string}): Argument {\n return new Argument({ expression: new Identifier({ name: param.name }) });\n}\n","import { Identifier } from '@lcap/nasl-concepts';\nimport { isBusinessLogic } from '@lcap/nasl-concepts/asserts';\nimport { Container, inject, injectable } from 'inversify';\nimport { LocalLogicStateIR, StateActionIR } from '../../types/state';\nimport { assertNever } from '../../utils/assert';\nimport { Logger } from '../../utils/logger';\nimport { ApiClientIdentifier, StateContextIR } from '../ir-builder-plugin';\nimport { ReactFileDescription, ReactHook } from './react-codegen-plugin';\nimport { ReactStateManagerVanillaPlugin } from './react-state-manager-vanilla-plugin';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { JavaScriptDomain } from '../../service-interface';\nimport { isNotNil } from '../../utils/types';\n\nconst logger = Logger('ReactStateManagerMobxPlugin');\n\nfunction shouldGenerateLocalStore(ctx: StateContextIR, storeName: string){\n const storeStates = ctx.providedStates.filter((x) => x.identifier === storeName);\n if (storeStates.length > 1) {\n throw new Error(`上下文中有多个状态名为${storeName}`);\n }\n if (storeStates.length === 1) {\n logger.debug(`上下文中已经存在${storeName},名为,不进行额外生成`);\n return false;\n }\n return true;\n}\n\n/**\n * React 原生状态管理器\n */\n@injectable()\nexport class ReactStateManagerMobxPlugin\n implements JavaScriptDomain.FrontendApplicationDomain.ReactDomain.ReactHookProvider\n{\n constructor(\n @inject(ReactStateManagerVanillaPlugin)\n private reactStateManagerVanillaPlugin: ReactStateManagerVanillaPlugin\n ) {}\n makeLocalLogicBundleHook(ctx: StateContextIR): ReactHook | undefined {\n const self = this;\n\n const shouldGen = shouldGenerateLocalStore(ctx, self.storeName);\n if(!shouldGen){\n return undefined;\n }\n\n const actionToProperty = (action: StateActionIR) => {\n return `${action.name}:${this.reactStateManagerVanillaPlugin.actionToBody(ctx, action, () => {\n return this.withCtx.bind(this);\n })}`;\n };\n // 包括 actions & states\n const properties: string[] = [\n ...ctx.providedStates\n .filter(\n (x): x is LocalLogicStateIR =>\n x.kind === 'local-logic' && x.initialization?.kind !== 'url-param'\n )\n .map(localLogicStateToProperty),\n ...ctx.actions.filter((x) => x.kind === 'standalone').map(actionToProperty),\n ];\n\n function getUrlStateCode() {\n const urlStates = ctx.providedStates.filter(\n (x): x is LocalLogicStateIR =>\n x.kind === 'local-logic' && x.initialization?.kind === 'url-param'\n );\n const code = urlStates\n .map((s) => {\n const init =\n self.reactStateManagerVanillaPlugin.initializationToExpr(ctx, s.initialization) ?? `''`;\n const getter = `\n get ${s.identifier}() {\n return ${self.storeName}.$queryParams.get('${s.identifier}') || ${init};\n }\n `;\n // TODO wudengke 使用self来获取storeName\n const setter = `\n set ${s.identifier}(value) {\n ${self.storeName}.$updateQueryParam('${s.identifier}', value);\n }\n `;\n return `${getter},${setter}`;\n })\n .join(',');\n if (code) {\n return `\n $queryParams: new URL(window.location).searchParams,\n $updateQueryParam(key: string, value: string) {\n const params = new URL(window.location).searchParams;\n params.set(key, value);\n window.history.pushState(null, '', '?' + params.toString());\n ${self.storeName}.$queryParams = params;\n },\n ${code},`;\n }\n return code;\n }\n const urlStatesCode = getUrlStateCode();\n const propertiesCode = properties.join(',');\n return {\n kind: 'free',\n code: `const ${self.storeName} = useLocalObservable(()=>{\n return {\n ${urlStatesCode}\n ${propertiesCode}\n }\n })`,\n import: {\n import: '{ useLocalObservable }',\n from: 'mobx-react-lite',\n },\n declarations: [self.storeName]\n };\n function localLogicStateToProperty(state: LocalLogicStateIR): string {\n const initValue = self.reactStateManagerVanillaPlugin.initializationToExpr(\n ctx,\n state.initialization\n );\n return `${state.identifier}: ${initValue ?? 'undefined'}`;\n }\n }\n makePublicBusinessLogicHook(ctx: StateContextIR): ReactHook[] {\n const publicBusinessLogic = ctx.actions.filter(\n (x) => x.kind === 'standalone' && isBusinessLogic(x.__raw) && x.__raw.isPublic\n );\n\n if (publicBusinessLogic.length === 0) {\n return [];\n }\n\n return [\n {\n kind: 'free',\n code: `\n useImperativeHandle(ref, () => ({\n ${publicBusinessLogic.map((x) => `${x.name}: ${this.storeName}.${x.name}`).join(',')}\n }));\n `,\n import: {\n from: 'react',\n import: '{ useImperativeHandle }',\n },\n declarations: []\n },\n ];\n }\n /**\n * 根据所消费的State的信息,产生支持消费的Hooks调用\n */\n produceHooks(ctx: StateContextIR): ReactHook[] {\n // TODO wudengke 因为这个方法会修改ctx(注册componentRef)。用类型保证ctx调用顺序!\n const localLogicBundleHook = this.makeLocalLogicBundleHook(ctx);\n const treeStateHooks = this.reactStateManagerVanillaPlugin.makeTreeStateHooks(ctx);\n // TODO wudengke `individual`语义比较模糊,需要重命名。\n const localIndividualHooks = this.reactStateManagerVanillaPlugin.makeLocalIndividualHooks(\n ctx,\n () => {\n return this.withCtx.bind(this);\n }\n );\n // TODO wudengke 根据consumedState信息,去掉那些没有用到的hooks\n const publicBusinessLogicHook = this.makePublicBusinessLogicHook(ctx);\n return [\n ...treeStateHooks,\n localLogicBundleHook,\n ...localIndividualHooks,\n ...publicBusinessLogicHook,\n ].filter(isNotNil);\n }\n get storeName() {\n return 'localStore';\n }\n __resolveIdentifier(ctx: StateContextIR, id: Identifier): string | undefined {\n return this.__resolveName(ctx, id.name);\n }\n __resolveName(ctx: StateContextIR, name: string) {\n const self = this;\n const resolvedName = resolveAsAction(name) ?? resolveAsState(name);\n if (!resolvedName) {\n logger.debug(`cannot find symbol \"${name}\" in the state context`);\n }\n return resolvedName;\n function resolveAsAction(name: string): string | undefined {\n const action = ctx.findActionByName(name);\n if (action) {\n return `${self.storeName}.${action.name}`;\n }\n }\n function resolveAsState(name: string): string | undefined {\n const state = ctx.findStateByName(name);\n if (!state) {\n return;\n }\n switch (state.kind) {\n case 'standalone': {\n switch (state.initialization.kind) {\n case 'component-ref': {\n return `$refs.${name}`;\n }\n case 'variable': {\n return `${name}`;\n }\n default: {\n assertNever(state.initialization);\n }\n }\n }\n case 'tree': {\n return name;\n }\n case 'local-logic': {\n return `${self.storeName}.${name}`;\n }\n default: {\n assertNever(state);\n }\n }\n }\n }\n /**\n * @deprecated 用依赖注入的方法做\n */\n withCtx(ctx: StateContextIR) {\n return {\n resolveIdentifier: (id: Identifier) => {\n return this.__resolveIdentifier(ctx, id);\n },\n resolveName: (name: string) => {\n return this.__resolveName(ctx, name);\n },\n resolveCalleeNamespace: (name: string) => {\n const resolveAsNamespace = (ns: string) => {\n // TODO wudengke 可以在IR层面处理\n if (ns.startsWith('nasl.')) {\n // FIXME wudengke 实现它\n return undefined;\n } else if (ns.startsWith('app.logics')) {\n return this.__resolveName(ctx, ApiClientIdentifier);\n }\n };\n const res = resolveAsNamespace(name);\n if (res) {\n return res;\n } else {\n const res = this.__resolveName(ctx, name);\n // FIXME wudengke\n if (res?.endsWith('Ref')) {\n return `${res}.current`;\n }\n return res;\n }\n },\n };\n }\n genHookDefinition(): ReactFileDescription {\n return new ReactFileDescription(\n 'MobxHooks',\n [],\n [],\n [\n `export const useUserInfo = ()=>{\n return window.$global.userInfo ?? {};\n }`,\n ]\n );\n }\n\n static install(container: Container) {\n const c = container.createChild();\n c.bind(ServiceMetaKind.ReactStateManager).to(ReactStateManagerMobxPlugin);\n c.bind(ServiceMetaKind.ReactHookProvider).to(ReactStateManagerMobxPlugin);\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLDomain } from '../../service-interface';\nimport { ServiceMetaKind } from '../../service-metakind';\nimport { ComponentInstanceIR, GeneralComponentIR, NASLAppIR } from '../../types/ir';\nimport { Logger } from '../../utils';\nimport { isReferencedComponentATemplate } from '../../utils/component';\nimport { bindAttrToIR } from '../ir-builder-plugin';\n\nconst logger = Logger('ReactSlotPlugin');\n\n/**\n * React Slot 插件\n *\n * 1. 将slot元素移动到attrs中\n * 2. 对ViewElement的tag为template的slotScope,根据其所处的层级,修改slotScope的名字\n * @public\n */\n@injectable()\nexport class ReactSlotPlugin implements NASLDomain.IRPostProcesser {\n postProcess(ir: NASLAppIR): NASLAppIR {\n logger.info('IR 后处理');\n function processComponentInstance(c: ComponentInstanceIR) {\n ReactSlotPlugin.recursivelyFixNestedSlotScope(c, {\n currentNestedLevel: 0,\n });\n ReactSlotPlugin.recursivelyProcessSlot(c);\n }\n function traverseRootComponentInstances(c: GeneralComponentIR) {\n c.elements.forEach((c) => {\n processComponentInstance(c);\n });\n if (c.kind === 'view') {\n // 递归处理子页面\n c.childComponents.forEach((subView) => {\n traverseRootComponentInstances(subView);\n });\n }\n }\n ir.bizComponents.forEach((biz) => {\n traverseRootComponentInstances(biz);\n });\n ir.views.forEach((view) => {\n traverseRootComponentInstances(view);\n });\n return ir;\n }\n /**\n * 将slot元素移动到attrs中\n * @param c\n */\n static recursivelyProcessSlot(c: ComponentInstanceIR) {\n // 后序遍历\n // 在recursivelyHandleComponentInstanceIr中children中有些元素会被移动到attrs中\n // 若不先处理children,这些被移动到attrs中的元素就不会被处理\n c.children.forEach((c) => {\n ReactSlotPlugin.recursivelyProcessSlot(c);\n });\n ReactSlotPlugin.processForSlots(c);\n }\n /**\n * 递归地根据对ViewElement所处的层级,给slotScope加上数字后缀\n *\n * slotScope只会取值为current。则根据层级,依次修改为current1, current2, current3等...\n * @param c\n */\n static recursivelyFixNestedSlotScope(\n c: ComponentInstanceIR,\n options: {\n /**\n * 当前嵌套的层级, 定义为:当前元素的祖先a中有多少a.slot.scope非空\n */\n currentNestedLevel: number;\n }\n ) {\n const currentScopeVaraibleName = 'current';\n // 若当前元素的slot.scope非空,则说明当前元素具有current\n const hasCurrent = !!c.slot.scope;\n if (hasCurrent && options.currentNestedLevel >= 1) {\n // 若当前元素具有current,则将当前元素的scopeVariableName修改为current1, current2, current3等...\n c.slot.scope = `${currentScopeVaraibleName}${options.currentNestedLevel}`;\n }\n // 若当前元素具有current,则说明当前元素的嵌套层级+1\n const levelDelta = hasCurrent ? 1 : 0;\n const nextLevel = options.currentNestedLevel + levelDelta;\n for (const child of c.children) {\n ReactSlotPlugin.recursivelyFixNestedSlotScope(child, {\n currentNestedLevel: nextLevel,\n });\n }\n }\n static processForSlots(c: ComponentInstanceIR) {\n const newChildren: ComponentInstanceIR[] = [];\n for (const child of c.children) {\n const slotName = child.slot.target;\n // slotName非空则说明它是插槽元素\n if (slotName) {\n // 约定:不允许有多个slotName相同的子元素\n // 约定:不允许slotName和父组件的属性同名\n if (c.attrs.some((x) => x.name === slotName)) {\n const nodePath = c.__raw?.nodePath;\n throw new Error(\n `${nodePath}存在多个slotName=${slotName}的子元素或已经有attr名为${slotName},为脏数据`\n );\n }\n // 约定:若child为空的template标签,则直接忽略\n if (isReferencedComponentATemplate(child.component) && child.children.length === 0) {\n continue;\n }\n const ir = bindAttrToIR({\n type: 'component',\n component: child,\n scopeVariable: child.slot.scope,\n name: slotName,\n });\n if (ir) {\n c.attrs.push(ir);\n }\n } else {\n newChildren.push(child);\n }\n }\n c.children = newChildren;\n }\n static install(c: Container) {\n c.bind(ServiceMetaKind.IRPostProcesser).to(ReactSlotPlugin).inSingletonScope();\n return c;\n }\n}\n","import '@abraham/reflection';\nimport { injectable, type Container, inject } from 'inversify';\nimport { App, Frontend } from '@lcap/nasl-concepts';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { CommonAppConfig } from '../../../types/config';\nimport { GeneratorInfrastructureDomain } from '../../../service-interface';\nimport { isNotNil } from '../../../utils/types';\nimport { Logger } from '../../../utils/logger';\nimport {\n extractAppLevelFrontendDeps,\n extractFrontendLevelDeps,\n downloadDependenciesToPackages,\n downloadDependenciesToLcapModules,\n} from '../../../utils/dependency-management';\nimport { getPublicPath, getBackendPath } from '../../../utils/url';\nimport { FrontendBundlerConfigPlugin } from '../frontend-bundler-config-plugin';\n\ntype FS = GeneratorInfrastructureDomain.FileSystemProvider;\n\nconst logger = Logger('BundlerConfigDataPlugin');\n\n@injectable()\nexport class BundlerConfigDataPlugin {\n constructor(\n @inject(ServiceMetaKind.FrontendBundlerConfig)\n private frontendBundlerConfigPlugin: FrontendBundlerConfigPlugin\n ) {}\n\n async getBundlerConfigData(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig,\n fs: FS,\n frameworkKind: 'vue3' | 'react' | 'vue2'\n ) {\n const feDeps = [...extractAppLevelFrontendDeps(app), ...extractFrontendLevelDeps(frontend)];\n\n await downloadDependenciesToLcapModules(feDeps, fs, {\n STATIC_URL: config.STATIC_URL,\n frameworkKind,\n });\n\n const orginDependencies = await downloadDependenciesToPackages(feDeps, fs, {\n STATIC_URL: config.STATIC_URL,\n });\n const dependencies = orginDependencies\n ?.map((dep) => {\n const target = dep.sources.find((x) => x.endsWith('/index.js'));\n if (target) {\n return {\n name: dep.name,\n resolvedTo: `./src/${target}`.replace(/\\/index\\.js$/, ''),\n scope: dep.kind === 'extension' ? '@extension' : undefined,\n };\n }\n return undefined;\n })\n .filter(isNotNil)\n .map((x) => {\n const name = x.scope ? `${x.scope}/${x.name}` : x.name;\n return {\n pkgName: name,\n ...x,\n };\n });\n\n let aliasMapStr = `\\n'@': path.resolve(__dirname, './src'),\\n`;\n if (dependencies && dependencies.length > 0) {\n aliasMapStr +=\n '\\n' +\n dependencies\n ?.map((x) => {\n return `'${x.pkgName}' : path.resolve(__dirname, '${x.resolvedTo}'),`;\n })\n .join('\\n');\n }\n\n const dependenciesStr = dependencies?.map((x) => `'${x.pkgName}'`).join(', ');\n const publicPath = getPublicPath(app, config, frontend);\n const backendUrl = getBackendPath(app, config, logger);\n logger.info(\n { publicPath, backendUrl, aliasMapStr },\n frameworkKind === 'vue3' ? 'vite配置' : 'rspack配置'\n );\n\n // 将 backendUrl publicPath aliasMapStr 等动态信息保存到 compiler-config-plugin 插件中\n this.frontendBundlerConfigPlugin.setCompilerConfig({\n backendUrl,\n publicPath,\n aliasMapStr,\n });\n\n return { backendUrl, publicPath, aliasMapStr, dependenciesStr };\n }\n\n static install(c: Container) {\n c.bind(BundlerConfigDataPlugin).toSelf();\n return c;\n }\n}\n","import { App, Frontend } from '@lcap/nasl-concepts';\nimport { CommonAppConfig } from '../types/config';\nimport { lightJoin } from 'light-join';\n\n// TODO wudengke 确认是否更换https\nexport function getBasePath(app: App, config: CommonAppConfig, ensureProtocol?: 'http') {\n let baseUrl = `${config.USER_STATIC_URL}/${config.tenant}/${app.id}/${config.env}`;\n if (ensureProtocol && baseUrl.startsWith('//')) {\n return `${ensureProtocol}:${baseUrl}`;\n }\n return baseUrl;\n}\n\nexport function ensureHasPrefix(target: string, prefix: string) {\n return target.startsWith(prefix) ? target : `${prefix}${target}`;\n}\n\n// TODO wudengke 整理一下这个和getBasePath函数\nfunction ensureUrlHasProtocol(url: string) {\n try {\n const parsedUrl = new URL(url);\n if (parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:') {\n // URL 已经包含协议\n return url;\n } else {\n // URL 没有协议,添加协议后返回\n return 'https://' + url;\n }\n } catch (error) {\n return `https://${url}`;\n }\n}\n\nexport function normalizeStaticUrl(staticURL: string) {\n // staticUrl形如 \"//minio-api.react01-lowcode.com/lowcode-static\",因此需要去掉前缀//\n return ensureUrlHasProtocol(staticURL.replace(/^\\/\\//, ''));\n}\n\nexport function urlJoin(...args: string[]) {\n return args.map((arg) => arg.replace(/^\\/|\\/$/g, '')).join('/');\n}\n\n// TODO wudengke 重构一下这个函数\nexport function getPublicPath(app: App, config: CommonAppConfig, frontend: Frontend): string {\n if (config.isExport) {\n return `/`;\n }\n const publicPath = `${getBasePath(app, config)}${frontend.basePath ?? ''}`;\n if (publicPath.endsWith('/')) {\n return publicPath;\n }\n return `${publicPath}/`;\n}\n\nexport function getBackendPath(app: App, config: CommonAppConfig, logger: any) {\n if (config.isExport) {\n return 'http://localhost:8080';\n }\n const url = `http://${config.env}.${app.name}.${config.tenant}.${config.lowcodeDomain}`;\n if (app.sysPrefixPath) {\n logger.info(`启用全局前缀: sysPrefixPath = ${app.sysPrefixPath}`);\n return lightJoin(url, app.sysPrefixPath);\n }\n return url;\n}\n","import { App, Frontend, Module } from '@lcap/nasl-concepts';\nimport { Logger } from './logger';\nimport { normalizeStaticUrl } from './url';\nimport { isConnector } from '@lcap/nasl-concepts/asserts';\nimport { GeneratorInfrastructureDomain } from '../service-interface';\n/**\n * 翻译器不使用fetch,在node中fetch由udici实现,可能会遇到UND_ERR_CONNECT_TIMEOUT问题\n * refer to: https://undici.nodejs.org/#/?id=network-address-family-autoselection\n */\nimport axios from 'axios';\nimport {\n getPredefinedMaterialByTags,\n} from '../hack/material-config/predefined-dependencies-manager';\n\ntype PackageDesc = { name: string; version: string; kind: 'standard' | 'extension' };\n\ntype FS = GeneratorInfrastructureDomain.FileSystemProvider;\n\nexport function extractAppLevelFrontendDeps(app: App): PackageDesc[] {\n const logger = Logger('extractFrontendDeps');\n const feExtensions = app.dependencies.filter((dep): dep is Module => {\n return !isConnector(dep) && !!dep.frontends?.length;\n });\n\n // const packageInfo = app.packageInfos.find((info) => info.scope === frontend.type);\n // //@ts-expect-error frontend没有这个属性\n // const frameworkKind = frontend?.frameworkKind ?? 'react';\n // const ui = packageInfo?.ui.find((info) => info.frameworkKind === frameworkKind);\n\n logger.info({ packageInfo: app.packageInfos });\n\n // 暂时先不需要template,等vue也接入翻译器了再说\n // const template = packageInfo?.template.find(info => info.frameworkKind === frameworkKind);\n\n const deps: PackageDesc[] = [\n ...feExtensions.map(({ name, version }) => {\n return { name, version, kind: 'extension' } as const;\n }),\n ];\n\n return deps;\n}\n\n/**\n * 提取前端依赖库,例如框架等\n * @param frontend\n * @returns\n */\nexport function extractFrontendLevelDeps(frontend: Frontend): PackageDesc[] {\n const deps = [];\n\n const uiLib = getPredefinedMaterialByTags(['ui', frontend.type, frontend.frameworkKind]);\n if (uiLib) {\n deps.push(uiLib as unknown as PackageDesc);\n }\n\n return deps;\n}\n\ntype WriteOnlyFS = {\n write: (path: string, content: string) => void;\n};\n\nexport async function downloadDependenciesToPackages(\n feDeps: PackageDesc[],\n fs: WriteOnlyFS,\n config: { STATIC_URL: string }\n) {\n const logger = Logger('downloadDependenciesToPackages');\n if (feDeps.length === 0) {\n logger.info('无依赖库需要下载到 packages 目录');\n return;\n } else {\n logger.info(\n { feExtensions: feDeps.map((x) => `${x.name}@${x.version}`) },\n '需要下载到 packages 目录的前端依赖库列表'\n );\n }\n logger.info('开始下载前端依赖库到 packages 目录');\n const staticUrl = normalizeStaticUrl(config.STATIC_URL);\n const files = await Promise.all(\n feDeps.map(async (ext) => {\n logger.info({ ext }, '下载前端依赖库到 packages 目录');\n const isExtension = ext.kind === 'extension';\n const path = `packages${isExtension ? '/extension' : ''}/${ext.name}@${ext.version}`;\n const commonPrefix = `${path}/dist-theme`;\n const packagePathWithPrefix = `${staticUrl}/${path}`;\n const sources = await listPackageSources(ext);\n logger.debug({ sources });\n const urlSources = sources.map((source) => {\n const url = `${staticUrl}/${source}`;\n logger.debug({ url, source });\n return { url, source };\n });\n // HACK: 默认创建一个空的样式文件\n fs.write(`/src/${path}/dist-theme/index.css`, '');\n logger.info({ urls: urlSources.map((x) => x.url) }, '下载文件列表');\n try {\n await Promise.all([\n ...urlSources.map(async ({ source, url }) => {\n logger.debug({ url }, '正在下载');\n try {\n const response = await axios.get(url, { responseType: 'text' });\n const text = response.data;\n const vfsPath = `/src/${source}`;\n fs.write(vfsPath, text);\n logger.debug({ vfsPath }, '写入虚拟文件系统路径');\n } catch (error) {\n logger.error({ url, error }, '下载失败');\n }\n logger.debug({ url }, '下载成功');\n }),\n ]);\n } catch (error) {\n logger.error(error);\n }\n\n async function listPackageSources({ name, version, kind }: PackageDesc) {\n if (kind === 'standard') {\n // 若是官方组件库,没有manifest文件,且约定必定有index.js和index.css\n return ['index.js', 'index.css'].map((x) => {\n return `packages/${name}@${version}/dist-theme/${x}`;\n });\n }\n const manifestUrl = `${packagePathWithPrefix}/manifest`;\n try {\n const response = await axios.get(manifestUrl, { responseType: 'text' });\n const manifestText = response.data as string;\n const sources = manifestText\n .split(/\\n/)\n .filter((text) => text.trim().startsWith(commonPrefix))\n .map((line) => {\n return line.split(':')[0].trim();\n });\n if (sources.length === 0) {\n // HACK: 有些包没有manifest文件,此时默认下载index.js\n return [`${path}/dist-theme/index.js`];\n }\n return sources;\n } catch (error) {\n if (error instanceof Error) {\n const err = new Error(`下载 ${manifestUrl} 失败: ${error.message}`);\n logger.error(err);\n throw err;\n }\n throw error;\n }\n }\n return { packagePath: packagePathWithPrefix, sources, projectPath: path, ...ext };\n })\n );\n logger.info('下载前端依赖库到 packages 目录完成');\n logger.debug(files);\n return files;\n}\n\nexport async function judgePackageZipExists(dep: PackageDesc, staticUrl: string): Promise<boolean> {\n const file = `${dep.name}@${dep.version}/zip.tgz`;\n const isExtension = dep.kind === 'extension';\n const url = `${normalizeStaticUrl(staticUrl)}/packages${isExtension ? '/extension' : ''}/${file}`;\n try {\n const response = await axios.head(url, {\n headers: {\n 'Content-Type': 'application/zip',\n },\n });\n return response.status === 200;\n } catch (error) {\n return false;\n }\n}\n\nasync function downloadDependencyToLcapModules(\n dep: PackageDesc,\n fs: FS,\n staticUrl: string,\n logger: any\n) {\n const { name: pkgName, version: pkgVersion, kind } = dep;\n let packageJson: any = fs.read('/package.json')?.toString();\n if (packageJson) {\n try {\n packageJson = JSON.parse(packageJson);\n\n // 先判断是否存在 zip.tgz 包,不存在则抛错\n const isPackageZipExists = await judgePackageZipExists(dep, staticUrl);\n if (!isPackageZipExists) {\n logger.info(`前端依赖 ${pkgName}@${pkgVersion} 的 zip.tgz 包不存在`);\n throw new Error('zip.tgz NotFound');\n }\n\n // 拉取远端 zip.tgz 包\n const file = `${pkgName}@${pkgVersion}/zip.tgz`;\n const isExtension = kind === 'extension';\n const url = `${normalizeStaticUrl(staticUrl)}/packages${\n isExtension ? '/extension' : ''\n }/${file}`;\n\n const response = await axios.get(url, {\n responseType: 'arraybuffer',\n headers: {\n 'Content-Type': 'application/gzip',\n },\n });\n const targetPath = `/lcap_modules/${file}`;\n fs.write(targetPath, response.data);\n logger.info(`下载依赖 ${pkgName}@${pkgVersion} 到 lcap_modules 目录下`);\n return {\n pkgName,\n targetPath,\n };\n } catch (error) {\n throw error;\n }\n }\n}\n\nexport async function downloadDependenciesToLcapModules(\n feDeps: PackageDesc[],\n fs: FS,\n config: { STATIC_URL: string; frameworkKind: 'vue3' | 'react' | 'vue2' }\n) {\n const logger = Logger('downloadDependenciesToLcapModules');\n if (feDeps.length === 0) {\n logger.info('无依赖库');\n return;\n } else {\n logger.info({ feExtensions: feDeps.map((x) => `${x.name}@${x.version}`) }, '前端依赖库列表');\n }\n logger.info('开始下载前端依赖库到 lcap_modules 目录');\n const staticUrl = normalizeStaticUrl(config.STATIC_URL);\n try {\n // 先下载 basic-template\n const basicTemplate = getPredefinedMaterialByTags(['template', 'core']);\n const downloadedDeps = [];\n if (basicTemplate) {\n const res = await downloadDependencyToLcapModules(\n { ...basicTemplate, kind: 'standard' },\n fs,\n staticUrl,\n logger\n );\n if (res) {\n downloadedDeps.push(res);\n }\n }\n\n // react 应用暂时不需要下载依赖的 zip.tgz 包到 lcap_modules 目录下作为依赖\n // 仍然采用下载 index.js 和 index.css 文件到 packages 目录下作为依赖,alias 到 packages 目录下\n // 原因:一方面是翻译器翻译的引用相关的代码的问题,一方面是包本身 pkg 定义的问题\n if (config.frameworkKind === 'vue3') {\n // 优先下载依赖的 zip.tgz 包到 lcap_modules 目录下,作为依赖\n await Promise.all(\n feDeps.map(async (dep) => {\n try {\n const res = await downloadDependencyToLcapModules(dep, fs, staticUrl, logger);\n\n if (res) {\n // 下载成功后立即从数组中删除\n const index = feDeps.indexOf(dep);\n feDeps.splice(index, 1);\n\n downloadedDeps.push(res);\n }\n } catch (error) {}\n })\n );\n }\n\n // 将已经下载的依赖更新到 package.json 中\n let packageJson: any = fs.read('/package.json')?.toString();\n packageJson = JSON.parse(packageJson);\n if (!packageJson.dependencies) {\n packageJson.dependencies = {};\n }\n downloadedDeps.forEach(({ pkgName, targetPath }) => {\n packageJson.dependencies[pkgName] = `.${targetPath}`;\n });\n fs.write('/package.json', JSON.stringify(packageJson, null, 2));\n\n logger.info('下载前端依赖库到 lcap_modules 目录完成');\n } catch (error) {\n if (error instanceof Error) {\n logger.error(`下载前端依赖的 zip.tgz 包失败:${error.message}`);\n }\n }\n}\n","import '@abraham/reflection';\nimport { injectable, type Container, inject } from 'inversify';\nimport { App, Frontend } from '@lcap/nasl-concepts';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { CommonAppConfig } from '../../../types/config';\nimport { GeneratorInfrastructureDomain } from '../../../service-interface';\nimport { BundlerConfigDataPlugin } from './bundler-config-data-plugin';\nimport { FrontendPerformancePlugin } from '../frontend-performance-plugin';\n\ntype FS = GeneratorInfrastructureDomain.FileSystemProvider;\n\n@injectable()\nexport class RspackConfigPlugin {\n constructor(\n @inject(BundlerConfigDataPlugin)\n private bundlerConfigDataPlugin: BundlerConfigDataPlugin,\n @inject(ServiceMetaKind.FrontendPerformance)\n private frontendPerformancePlugin: FrontendPerformancePlugin\n ) {}\n\n async configBundlerConfig(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig,\n fs: FS,\n frameworkKind: 'vue3' | 'react' | 'vue2'\n ) {\n const { backendUrl, publicPath, aliasMapStr, dependenciesStr } =\n await this.bundlerConfigDataPlugin.getBundlerConfigData(\n app,\n frontend,\n config,\n fs,\n frameworkKind\n );\n\n let rspackConfigSource = fs.read('/rspack.config.js')?.toString();\n if (rspackConfigSource) {\n if (this.frontendPerformancePlugin?.performanceOptions?.chunks) {\n rspackConfigSource = rspackConfigSource.replace(\n `chunks: 'all'`,\n `chunks: '${this.frontendPerformancePlugin?.performanceOptions?.chunks}'`\n );\n }\n\n rspackConfigSource = rspackConfigSource\n .replace(`const backendUrl = '';`, `const backendUrl = '${backendUrl}'`)\n .replace(`const publicPath = '';`, `const publicPath = '${publicPath}';`)\n .replace(`sourceMap: false,`, `sourceMap: ${config.env === 'dev'},`)\n .replace('alias: {}', `alias: {${aliasMapStr}}`)\n .replace('const isDev = false', `const isDev = ${config.env === 'dev'}`)\n\n // 快捷发布\n if (config.needCompileViews && config.needCompileViews.length > 0 && config.cacheChunksMapCode) {\n rspackConfigSource = rspackConfigSource\n .replace('isIncremental: false', 'isIncremental: true')\n .replace('chunksMap: \\'\\'', `chunksMap: \\`${config.cacheChunksMapCode}\\``)\n }\n\n // 导出的源码中不启用LcapPlugin\n if (config.isExport) {\n rspackConfigSource = rspackConfigSource.replace(/\\/\\/ LcapPlugin start\\s+new LcapPlugin\\(\\{[\\s\\S]*?\\}\\),\\s+\\/\\/ LcapPlugin end/g, '');\n }\n\n fs.write(\n '/rspack.config.js',\n rspackConfigSource\n );\n }\n }\n\n static install(c: Container) {\n c.bind(ServiceMetaKind.FrontendBundlerFileConfig).to(RspackConfigPlugin).inSingletonScope();\n return c;\n }\n}\n","import { Container, inject, injectable } from 'inversify';\nimport { CommonAppConfig } from '../../../types/config';\nimport { GeneralComponentIR, NASLAppIR } from '../../../types/ir';\nimport { InputFile } from '../../misc/project-organization-plugin';\nimport { RoutesExtractionPlugin } from '../../misc/routes-extraction-plugin';\nimport { ComponentIRToPathDict, ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { VueRouterPlugin } from '../common/vue-router-plugin';\nimport { Vue3CodegenPlugin } from './vue3-codegen-plugin';\nimport { Vue3EntryBuilderPlugin } from './vue3-entry-builder-plugin';\nimport { Vue3LibrariesBuilderPlugin } from './vue3-libraries-builder-plugin';\nimport { Vue3MetaDataBuilderPlugin } from './vue3-meta-data-builder-plugin';\nimport { Vue3ComponentsIndexBuilderPlugin } from './vue3-components-index-builder-plugin';\nimport { Vue3ClientLazyloadTemplateBuilderPlugin } from './vue3-client-lazyload-template-builder-plugin ';\nimport { Vue3PlatformBuilderPlugin } from './vue3-platform-builder-plugin';\nimport { Vue3EntryCssPlugin } from './vue3-entry-css-plugin';\n\n@injectable()\nexport class ComponentPathManager {\n private componentIRToPathDict: ComponentIRToPathDict = new WeakMap();\n\n markComponent(ir: GeneralComponentIR, path: string) {\n this.componentIRToPathDict.set(ir, path);\n return this;\n }\n getPathOf(ir: GeneralComponentIR) {\n return this.componentIRToPathDict.get(ir);\n }\n}\n\n@injectable()\nexport class Vue3ApplicationAssemblerPlugin {\n constructor(\n @inject(Vue3CodegenPlugin) private vue3CodegenPlugin: Vue3CodegenPlugin,\n @inject(RoutesExtractionPlugin) private routesExtactor: RoutesExtractionPlugin,\n @inject(VueRouterPlugin) private routerBuilder: VueRouterPlugin,\n @inject(Vue3EntryBuilderPlugin) private entryBuilder: Vue3EntryBuilderPlugin,\n @inject(Vue3LibrariesBuilderPlugin) private librariesBuilder: Vue3LibrariesBuilderPlugin,\n @inject(Vue3EntryCssPlugin) private entryCssBuilder: Vue3EntryCssPlugin,\n @inject(Vue3ComponentsIndexBuilderPlugin)\n private componentsIndexBuilder: Vue3ComponentsIndexBuilderPlugin,\n @inject(Vue3ClientLazyloadTemplateBuilderPlugin)\n private clientLazyloadTemplateBuilder: Vue3ClientLazyloadTemplateBuilderPlugin,\n @inject(Vue3PlatformBuilderPlugin) private platformBuilder: Vue3PlatformBuilderPlugin,\n @inject(Vue3MetaDataBuilderPlugin) private metaDataBuilder: Vue3MetaDataBuilderPlugin\n ) {}\n\n async assemble(\n ir: NASLAppIR,\n config: CommonAppConfig\n ): Promise<Record<string, InputFile | InputFile[]>> {\n const manager = new ComponentPathManager();\n const views = ir.views.flatMap((x) => {\n return this.vue3CodegenPlugin.genFiles(x, manager);\n });\n const bizComponents = ir.bizComponents.flatMap((x) => {\n return this.vue3CodegenPlugin.genFiles(x, manager);\n });\n let basePath = ir.configs.basePlatformConfig.basePath;\n if (!/\\/$/.test(basePath)) {\n basePath += '/';\n }\n const routesObjects = this.routesExtactor.extractRoute(ir.views, basePath, {\n lazy: true,\n });\n const router = this.routerBuilder.routeToCode(routesObjects.routes, manager, {\n frameworkKind: 'vue3',\n basePath,\n });\n const routerFile = new ReactFileDescription('router.ts', router.imports, [], [router.code]);\n const libraries = await this.librariesBuilder.buildLibrariesImport(ir, config);\n return {\n views,\n bizComponents,\n router: routerFile,\n metadata: this.metaDataBuilder.buildMeta(ir),\n entry: this.entryBuilder.buildEntry(ir),\n platform: this.platformBuilder.buildPlatformConfig(ir),\n clientLazyloadTemplate: this.clientLazyloadTemplateBuilder.buildClientLazyloadTemplate(ir),\n componentsIndex: this.componentsIndexBuilder.buildComponentsIndex(ir),\n libraries,\n entryCss: this.entryCssBuilder.buildLibrariesImport(ir),\n };\n }\n static install(container: Container) {\n container.bind(Vue3ApplicationAssemblerPlugin).toSelf().inTransientScope();\n container.bind(ComponentPathManager).toSelf();\n return container;\n }\n}\n","import { kebab2Pascal } from '@lcap/nasl-utils';\nimport { Container, injectable } from 'inversify';\nimport { notImplemented } from '../../../utils/assert';\nimport { isNotNil } from '../../../utils/types';\nimport { RouteIR } from '../../misc/routes-extraction-plugin';\nimport { ImportIR } from '../../react/react-codegen-plugin';\nimport { NameMangler, ReactRouterDefaultViewFolderName } from '../../react/react-router-plugin';\nimport { ComponentPathManager } from '../vue3/vue3-application-assembler-plugin';\n\n@injectable()\nexport class VueRouterPlugin {\n private extractImportIR(routes: RouteIR[], componentPathManager: ComponentPathManager) {\n const nameMangler = new NameMangler();\n const viewComponentImports: ImportIR[] = recursivelyExtractImportIR(routes);\n return { viewComponentImports };\n function recursivelyExtractImportIR(routes: RouteIR[]): ImportIR[] {\n return routes.flatMap((r) => {\n if (r.kind === 'normal') {\n const elementIdentifier = r.elementTemplate.identifier;\n if (elementIdentifier) {\n const path = componentPathManager.getPathOf(r.elementTemplate);\n const componentName = kebab2Pascal(elementIdentifier);\n const coalescedName = kebab2Pascal(\n `${path}${elementIdentifier}`.replaceAll('/', '-').replace(/^-/, '')\n );\n const mangledName = nameMangler.query(coalescedName);\n r.elementMangledName = mangledName;\n // FIXME 路由文件路径没有被修正\n const from = `./pages${path}/${componentName}.vue`;\n const importIR = {\n from,\n import: mangledName,\n lazy: r.lazy,\n };\n return [importIR, ...recursivelyExtractImportIR(r.children ?? [])];\n }\n }\n return [];\n });\n }\n }\n routeToCode(\n routes: RouteIR[],\n componentPathManager: ComponentPathManager,\n config: {\n frameworkKind: 'vue3' | 'vue2' | 'react',\n basePath: string,\n }\n ): { code: string; imports: ImportIR[] } {\n function serializeVueRoute(r: RouteIR, isRoot: boolean = false): string | undefined {\n const { accumulativePath, thisLevelPath } = r;\n const path = isRoot ? accumulativePath : (thisLevelPath ?? '/');\n const basePath = config.basePath;\n\n if (r.kind === 'normal') {\n const children = r.children?.map((i) => serializeVueRoute(i)).filter(isNotNil) ?? [];\n const childrenStr = children.join(',\\n');\n const componentCode = `component: ${r.elementMangledName ?? r.elementTemplate.identifier}`;\n return `{path: \"${path}\", meta: ${JSON.stringify(\n r.meta\n )}, children: [${childrenStr}], ${componentCode} \\}`;\n } else if (r.kind === 'redirect') {\n // 匹配所有路径的重定向\n if (['vue3'].includes(config.frameworkKind) && path === '*') {\n return `{ path: \"/:pathMatch(.*)*\", redirect: ${JSON.stringify(basePath + r.redirect)} }`;\n }\n\n // 根路径的重定向\n if (['vue3'].includes(config.frameworkKind) && path === '/') {\n let result: string = `{ path: \"/\", redirect: ${JSON.stringify(basePath + r.redirect)} }`;\n\n if (basePath !== '/') {\n result += `, { path: \"${basePath}\", redirect: ${JSON.stringify(basePath + r.redirect)} }`;\n }\n\n return result;\n }\n\n /**\n * vue-router 4.x 相对重定向\n * https://router.vuejs.org/zh/guide/essentials/redirect-and-alias.html#%E7%9B%B8%E5%AF%B9%E9%87%8D%E5%AE%9A%E5%90%91\n */\n return `{ path: \"${path}\", redirect: to => to.path.replace(/\\\\/$/, '') + '/' + ${JSON.stringify(r.redirect)} }`;\n }\n notImplemented(r);\n }\n const { viewComponentImports } = this.extractImportIR(routes, componentPathManager);\n const routesConfig = routes\n .map((i) => serializeVueRoute(i, true))\n .filter(isNotNil)\n .join(',\\n');\n const routerConfigStr = `export const routes = [${routesConfig}];\n `;\n const routerCode = routerConfigStr;\n return {\n code: routerCode,\n imports: [...viewComponentImports],\n };\n }\n static install(c: Container) {\n c.bind(VueRouterPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { kebab2Pascal } from '@lcap/nasl-utils';\nimport { GeneralComponentIR, NASLAppIR } from '../../../types/ir';\nimport { ComponentIRToPathDict, ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { FolderPath, folderPathToString } from '../../../utils/path';\nimport { flatten } from 'lodash';\nimport { ComponentPathManager } from './vue3-application-assembler-plugin';\n\n@injectable()\nexport class Vue3CodegenPlugin {\n /**\n * @deprecated\n * @param c\n * @param dict\n * @param folder\n * @param irConfig\n * @returns\n */\n genFiles(\n c: GeneralComponentIR,\n manager: ComponentPathManager,\n folder?: FolderPath,\n irConfig?: NASLAppIR['configs']\n ): ReactFileDescription[] {\n manager.markComponent(c, folder ? folderPathToString(folder) : `/`);\n const single = new ReactFileDescription(\n `${kebab2Pascal(c.identifier)}.vue`,\n [],\n [\n {\n getImports() {\n // TODO 遍历当前x中所引用的组件,添加可能的ImportIR\n return [];\n },\n toCode() {\n return { code: c.__raw.toVue({ isComposition: true }) };\n },\n },\n ],\n [],\n folder\n );\n return flatten([\n single,\n c.kind === 'view'\n ? c.childComponents.flatMap((child) => {\n return this.genFiles(\n child,\n manager,\n [...(folder ?? []), { name: c.identifier }],\n irConfig\n );\n })\n : [],\n ]);\n }\n\n static install(c: Container) {\n c.bind(Vue3CodegenPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable, inject } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { isNotNil } from '../../../utils/types';\nimport { MicroFrontendPlugin } from '../../misc/micro-frontend/micro-frontend-plugin';\n\n@injectable()\nexport class Vue3EntryBuilderPlugin {\n constructor(\n @inject(ServiceMetaKind.MicroFrontendManager) private microFrontendManager: MicroFrontendPlugin\n ) {}\n\n /**\n * 构建入口文件 main.ts\n * @param ir - NASL应用中间表示\n * @returns 平台配置文件描述\n */\n buildEntry(ir: NASLAppIR): ReactFileDescription[] {\n const entryScript = this.microFrontendManager.produceScript(ir);\n const publicPathScript = this.microFrontendManager.producePublicPathScript(ir);\n const code = `\n if(window.LcapMicro){\n // 已经被加载于微前端环境\n renderApp();\n }else{\n const loadAssets = renderApp;\n ${entryScript};\n }\n `;\n\n const imports = [\n {\n from: './helper',\n import: '{ renderApp }',\n },\n publicPathScript\n ? {\n from: './public-path',\n }\n : undefined,\n ].filter(isNotNil);\n\n return [\n new ReactFileDescription('main.ts', imports, [], [code]),\n publicPathScript\n ? new ReactFileDescription('public-path.ts', [], [], [publicPathScript])\n : undefined,\n ].filter(isNotNil) as ReactFileDescription[];\n }\n\n static install(c: Container) {\n c.bind(Vue3EntryBuilderPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { CommonAppConfig } from '../../../types/config';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { kebab2Pascal } from '../../../utils/str';\nimport { judgePackageZipExists } from '../../../utils/dependency-management';\n@injectable()\nexport class Vue3LibrariesBuilderPlugin {\n /**\n * 构建依赖库导入文件\n * @param ir - NASL应用中间表示\n * @returns 依赖库导入文件描述\n */\n async buildLibrariesImport(ir: NASLAppIR, config: CommonAppConfig) {\n const importArr: string[] = [];\n const exportArr: string[] = [];\n\n // 基础组件库\n const standardLib = ir.packages.find((x) => x.kind === 'standard');\n if (standardLib) {\n const formattedName = kebab2Pascal(standardLib.name.split('/').at(-1) as string);\n importArr.push(`import * as ${formattedName} from '${standardLib.name}';`);\n exportArr.push(`export { ${formattedName} };`);\n exportArr.push(`window.lcapStandardUI = ${formattedName};`);\n\n // 如果将 zip 下载到本地作为 node_modules,则需要将 dist-theme 路径加上。\n // 否则走的是 vite alias,alias 路径上已经有 /dist-theme 路径了。\n const isPackageZipExists = await judgePackageZipExists(standardLib, config.STATIC_URL);\n importArr.push(\n `import '${standardLib.name}${isPackageZipExists ? '/dist-theme' : ''}/index.css';`\n );\n }\n\n // 依赖库\n const extensions = ir.packages.filter((x) => x.kind === 'extension');\n for (const ext of extensions) {\n const formattedName = kebab2Pascal(ext.name.split('/').at(-1) as string);\n // 如果将 zip 下载到本地作为 node_modules,则需要将 dist-theme 路径加上。\n // 否则走的是 vite alias,alias 路径上已经有 /dist-theme 路径了。\n const isPackageZipExists = await judgePackageZipExists(ext, config.STATIC_URL);\n const prefix = isPackageZipExists ? '' : '@extension/';\n\n exportArr.push(`export * as ${formattedName} from '${prefix}${ext.name}';`);\n if (ext.hasCss) {\n importArr.push(\n `import '${prefix}${ext.name}${isPackageZipExists ? '/dist-theme' : ''}/index.css';`\n );\n }\n }\n\n return new ReactFileDescription('libraries.ts', [], [], [[...importArr, ...exportArr].join('\\n')]);\n }\n\n static install(c: Container) {\n c.bind(Vue3LibrariesBuilderPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\n\n@injectable()\nexport class Vue3MetaDataBuilderPlugin {\n /**\n * 构建依赖库导入文件\n * @param ir - NASL应用中间表示\n * @returns 依赖库导入文件描述\n */\n buildMeta(ir: NASLAppIR) {\n return new ReactFileDescription(\n 'metaData.js',\n [],\n [],\n [`export default ${stringifyMetaData(ir.configs.metaData)}`]\n );\n }\n\n static install(c: Container) {\n c.bind(Vue3MetaDataBuilderPlugin).toSelf();\n return c;\n }\n}\n\n// low-code-frontend-generator复制的代码\nfunction stringifyMetaData(obj: any) {\n // 处理对象类型\n if (typeof obj === 'object' && obj !== null) {\n if (Array.isArray(obj)) {\n // 处理数组类型\n const elements: string[] = obj.map((element) => stringifyMetaData(element));\n return `[${elements.join(',')}]`;\n }\n let newObj = obj;\n const properties: string[] = [];\n if (obj?.concept === 'FrontendVariable') {\n const { defaultValue, defaultCode } = obj;\n\n newObj = obj.toJSON() || {};\n newObj.defaultCode = defaultCode;\n\n const defaultValueFn = defaultValue?.toJS({ getVuePrototype: true });\n if (defaultCode.executeCode && defaultValueFn) {\n properties.push(`\"defaultValueFn\": () => {\n return ${defaultValueFn}\n }`);\n }\n }\n\n Object.keys(newObj).forEach((key) => {\n const value: string = stringifyMetaData(newObj[key]);\n if (value !== undefined) properties.push(`${stringifyMetaData(key)}: ${value}`);\n });\n return `{\n ${properties.join(',')}\n }`;\n }\n\n return JSON.stringify(obj, null, 2);\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { capitalizeFirstLetter } from '../../../utils/str';\n\n@injectable()\nexport class Vue3ComponentsIndexBuilderPlugin {\n /**\n * 构建业务组件导出入口文件\n * @param ir - NASL应用中间表示\n * @returns 平台配置文件描述\n */\n buildComponentsIndex(ir: NASLAppIR) {\n const importArr: string[] = [];\n ir.bizComponents.forEach((biz) => {\n importArr.push(\n `export { default as Bs${capitalizeFirstLetter(\n biz.identifier\n )} } from './${capitalizeFirstLetter(biz.identifier)}.vue';`\n );\n });\n return new ReactFileDescription(\n 'index.ts',\n [],\n [],\n [importArr.join('\\n')],\n [{ name: 'components' }]\n );\n }\n\n static install(c: Container) {\n c.bind(Vue3ComponentsIndexBuilderPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable, inject } from 'inversify';\nimport { ServiceMetaKind } from '../../../service-metakind';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { NASLAppIR } from '../../../types/ir';\nimport { MicroFrontendPlugin } from '../../misc/micro-frontend/micro-frontend-plugin';\n\n@injectable()\nexport class Vue3ClientLazyloadTemplateBuilderPlugin {\n constructor(\n @inject(ServiceMetaKind.MicroFrontendManager) private microFrontendManager: MicroFrontendPlugin\n ) {}\n\n /**\n * 构建 client.js 模板文件\n * @param ir - NASL应用中间表示\n */\n buildClientLazyloadTemplate(ir: NASLAppIR) {\n const isDebug = ir.configs.config.debug;\n const entryScript = this.microFrontendManager.produceScript(ir);\n\n // entryScript中会有loadAssets的调用, loadAssets会在LcapPlugin中生成到client.js\n return new ReactFileDescription(\n '../client-lazyload-template.js',\n [],\n [],\n [\n `const extraJS = [];\n const extraCSS = [];\n const entryCode = \\`${entryScript}\\`;\n\n module.exports = {\n extraJS,\n extraCSS,\n entryCode,\n }`,\n ]\n );\n }\n\n static install(c: Container) {\n c.bind(Vue3ClientLazyloadTemplateBuilderPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\nimport { routesExtractionPlugin } from '../../misc/routes-extraction-plugin';\nimport { PlatformConfig } from '../../misc/metadata-plugin';\nimport { jsonStringifyKeepUndefined } from '../../../utils/json';\n\n@injectable()\nexport class Vue3PlatformBuilderPlugin {\n /**\n * 构建平台配置文件\n * @param ir - NASL应用中间表示\n * @returns 平台配置文件描述\n */\n buildPlatformConfig(ir: NASLAppIR) {\n const self = {\n ...routesExtractionPlugin.functions,\n };\n const basePath = ir.configs.basePlatformConfig.basePath + '/';\n const { authResourcePaths, baseResourcePaths } = self.extractRoute(ir.views, basePath, {\n lazy: false,\n frameworkKind: 'vue3',\n });\n const platformConfig: PlatformConfig = {\n ...ir.configs.basePlatformConfig,\n authResourcePaths,\n baseResourcePaths,\n };\n return new ReactFileDescription(\n 'platform.config.ts',\n [],\n [],\n [`export default ${jsonStringifyKeepUndefined(platformConfig)}`]\n );\n }\n\n static install(c: Container) {\n c.bind(Vue3PlatformBuilderPlugin).toSelf();\n return c;\n }\n}\n","import { Container, injectable } from 'inversify';\nimport { NASLAppIR } from '../../../types/ir';\nimport { ReactFileDescription } from '../../react/react-codegen-plugin';\n@injectable()\nexport class Vue3EntryCssPlugin {\n /**\n * 构建依赖库导入文件\n * @param ir - NASL应用中间表示\n * @returns 依赖库导入文件描述\n */\n buildLibrariesImport(ir: NASLAppIR) {\n const { themeCSS } = ir.configs;\n\n return new ReactFileDescription('index.css', [], [], [themeCSS]);\n }\n\n static install(c: Container) {\n c.bind(Vue3EntryCssPlugin).toSelf();\n return c;\n }\n}\n","import { App, Frontend, View } from '@lcap/nasl-concepts';\nimport { Container } from 'inversify';\nimport { OrganizedFile } from './plugins/misc/project-organization-plugin';\nimport { RspackConfigPlugin } from './plugins/misc/bundler/rspack-config-plugin';\nimport { Generator, GeneratorInfrastructureDomain } from './service-interface';\nimport { ServiceMetaKind } from './service-metakind';\nimport { CommonAppConfig } from './types/config';\nimport { Logger } from './utils/logger';\n\ntype FS = GeneratorInfrastructureDomain.FileSystemProvider;\n\nexport async function translateNASLToApp(\n /**\n * NASL对象\n */\n app: App,\n frontend: Frontend,\n config: CommonAppConfig,\n baseDir: string = './out',\n container: Container,\n fs: FS\n): Promise<OrganizedFile[]> {\n const logger = Logger('翻译过程');\n logger.debug({ config });\n async function genCode() {\n logger.info('开始翻译');\n try {\n const codeList = await container\n .get<Generator.NASLTranspiler>(ServiceMetaKind.NASLTranspiler)\n .transpile({\n app,\n frontend,\n config,\n baseDir,\n });\n\n const frontendBundlerFileConfig = container.get<RspackConfigPlugin>(\n ServiceMetaKind.FrontendBundlerFileConfig\n );\n\n await frontendBundlerFileConfig.configBundlerConfig(\n app,\n frontend,\n config,\n fs,\n frontend.frameworkKind\n );\n\n if (container.isBound(ServiceMetaKind.CodeGenerationLifecycleHooks)) {\n const hooks = container.getAll<GeneratorInfrastructureDomain.CodeGenerationLifecycleHooks>(\n ServiceMetaKind.CodeGenerationLifecycleHooks\n );\n for (const h of hooks) {\n await h.afterAllFilesGenerated();\n }\n }\n\n return codeList;\n } catch (error) {\n logger.error(error);\n throw error;\n } finally {\n logger.info('翻译结束');\n }\n return undefined;\n }\n const codeList = await genCode();\n return codeList ?? [];\n}\n","import type { AxiosInstance } from 'axios';\n\nexport async function fetchFile<T>(url: string, axios: AxiosInstance, text?: boolean) {\n if (typeof window !== 'undefined' && typeof window.fetch !== 'undefined') {\n const response = await window.fetch(url);\n const data = (await text) ? response.text() : response.json();\n return data as T;\n }\n\n const response = await axios.get<T>(url, {\n responseType: text ? 'text' : 'json',\n responseEncoding: 'utf8',\n });\n\n if (response.status !== 200) {\n throw new Error('request error!');\n }\n\n return response.data;\n}\n","import { Container, injectable } from 'inversify';\nimport { CommonAppConfig, NASLDomain, ServiceMetaKind } from '../../..';\nimport type { App, Frontend } from '@lcap/nasl-concepts';\nimport { buildAsyncAnalyzer } from './analysis/async-analysis';\n\nexport type AnalyzerOptions = {\n asyncAnalysis?: boolean;\n};\n\nexport type AnalyzerManager = {\n setOptions(options: AnalyzerOptions): void;\n};\n\n@injectable()\nexport class AnalyzerManagerPlugin implements AnalyzerManager, NASLDomain.IRPreProcesser {\n preProcess(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig\n ): { app: App; frontend: Frontend; config: CommonAppConfig } {\n const analyzer = buildAsyncAnalyzer();\n if (this.getOptions().asyncAnalysis) {\n // @ts-expect-error\n app.analyzer = analyzer;\n }\n return { app, frontend, config };\n }\n private options: AnalyzerOptions = {};\n /**\n * 设置完整的分析选项\n * @param options\n */\n setOptions(options: AnalyzerOptions): void {\n this.options = options;\n }\n /**\n * 获取分析选项\n * @returns 分析选项\n */\n getOptions(): AnalyzerOptions {\n return this.options;\n }\n\n static install(c: Container) {\n c.bind(ServiceMetaKind.IRPreProcesser).to(AnalyzerManagerPlugin);\n c.bind(ServiceMetaKind.AnalyzerManager).to(AnalyzerManagerPlugin);\n }\n}\n","import { SyntaxNode } from '../../../../../../nasl-concepts/src';\n\ntype Analyzer<Result> = {\n query: (node: SyntaxNode) => Result;\n};\n\ntype IsAsync = boolean;\n\nexport function buildAsyncAnalyzer(): Analyzer<{ async: IsAsync }> {\n const resultCache: WeakMap<SyntaxNode, IsAsync> = new WeakMap();\n\n function isSubtreeAsync(\n node: SyntaxNode,\n analyzeFunc: (n: SyntaxNode) => IsAsync = analyze\n ): boolean {\n let hasAsync = false;\n node.traverseStrictChildrenWithPruning((n) => {\n // 这个函数有问题,显式跳过自身\n if (n === node) {\n return false;\n }\n if (hasAsync) {\n return true;\n } else if (n) {\n hasAsync = analyzeFunc(n);\n return hasAsync;\n }\n });\n return hasAsync;\n }\n function analyze(node: SyntaxNode) {\n if (!node) {\n return false;\n }\n if (resultCache.has(node)) {\n return resultCache.get(node)!;\n }\n function dispatch(node: SyntaxNode): IsAsync {\n switch (node.concept) {\n //#region 调用节点\n case 'CallLogic': {\n const calleeNode = node.getCallNode();\n return analyze(calleeNode) || isSubtreeAsync(node);\n }\n case 'CallInterface': {\n return true;\n }\n case 'CallFunction': {\n return isSubtreeAsync(node);\n }\n case 'Match': {\n return isSubtreeAsync(node);\n }\n case 'Function': {\n return isSubtreeAsync(node);\n }\n case 'JSBlock': {\n return true;\n }\n case 'ExternalDestination':\n case 'Destination': {\n return true;\n }\n case 'NewStructure':\n case 'NewComposite':\n case 'NewMap':\n case 'NewList': {\n return isSubtreeAsync(node);\n }\n //#endregion 调用节点\n\n //#region 定义节点\n case 'SubLogic': {\n return true;\n }\n case 'Logic': {\n if (node.likeComponent) {\n return node.subLogics?.some(analyze) || isSubtreeAsync(node);\n } else {\n // 谁懂这是什么逻辑。过近似视作异步。\n return true;\n }\n }\n case 'AnonymousFunction': {\n return isSubtreeAsync(node);\n }\n case 'BindEvent': {\n return node.logics?.some(analyze) ?? false;\n }\n case 'Interface':\n case 'OverriddenLogic': {\n return true;\n }\n //#endregion 定义节点\n default: {\n return isSubtreeAsync(node);\n }\n }\n }\n // 先标记为异步,防止循环\n resultCache.set(node, true);\n const res = dispatch(node);\n resultCache.set(node, res);\n return res;\n }\n return {\n query: (node) => {\n return { async: analyze(node) };\n },\n };\n}\n","import type { App, Frontend, FrontendType } from '@lcap/nasl-concepts';\nimport { Container, injectable } from 'inversify';\nimport { CommonAppConfig, NASLDomain, ServiceMetaKind } from '../../..';\nimport { NameMangler } from './name-mangler';\n\n@injectable()\nexport class NameManglerManagerPlugin implements NASLDomain.IRPreProcesser {\n preProcess(\n app: App,\n frontend: Frontend,\n config: CommonAppConfig\n ): { app: App; frontend: Frontend; config: CommonAppConfig } {\n // 遍历app给View/BussinessComponent添加nameMangler\n\n frontend.views?.forEach((view) => {\n const mangler = NameMangler.mount(view);\n // 遍历局部变量\n view.variables?.forEach((v) => {\n mangler.occupyName(v.name);\n });\n });\n\n const frontendType = frontend?.parentNode as FrontendType;\n frontendType?.businessComponents?.forEach((bc) => {\n const mangler = NameMangler.mount(bc);\n // 遍历局部变量\n bc.variables?.forEach((v) => {\n mangler.occupyName(v.name);\n });\n });\n return { app, frontend, config };\n }\n\n static install(c: Container) {\n c.bind(ServiceMetaKind.IRPreProcesser).to(NameManglerManagerPlugin);\n c.bind(ServiceMetaKind.NameManglerManager).to(NameManglerManagerPlugin);\n }\n}\n","import { View, BusinessComponent } from '@lcap/nasl-concepts';\n\ntype Context = View | BusinessComponent;\n\nexport class NameMangler {\n rawNameMap: Map<string, string> = new Map();\n mangledNameCounter: Map<string, number> = new Map();\n\n // 假设rawName是唯一的\n makeUniqueName(uniqueName: string, rawName: string) {\n let name = this.rawNameMap.get(rawName);\n\n if (name) {\n return name;\n }\n\n let counter = 0;\n name = uniqueName;\n\n while (this.isNameOccupied(name)) {\n counter = this.mangledNameCounter.get(name) as number;\n name = uniqueName + counter;\n }\n\n this.rawNameMap.set(rawName, name);\n this.mangledNameCounter.set(name, counter + 1);\n\n return name || rawName;\n }\n\n isNameOccupied(name: string) {\n return (this.mangledNameCounter.get(name) ?? 0) > 0;\n }\n\n // 占用名称\n occupyName(name: string) {\n const counter = this.mangledNameCounter.get(name) ?? 0;\n this.mangledNameCounter.set(name, counter + 1);\n this.rawNameMap.set(name, name);\n }\n\n static mount(ctx: Context): NameMangler {\n // @ts-expect-error\n if (ctx.nameMangler) {\n // @ts-expect-error\n return ctx.nameMangler;\n }\n const mangler = new NameMangler();\n // @ts-expect-error\n ctx.nameMangler = mangler;\n return mangler;\n }\n}\n","import { isNil, isObject } from 'lodash';\nimport { Logger } from '..';\n\nconst logger = Logger('SanityCheck');\nexport function sanityCheck(appObject: Object | undefined, path: string[] = []) {\n if (isObject(appObject)) {\n if ('concept' in appObject && appObject?.concept === 'ViewElement') {\n // @ts-expect-error\n if ([isNil(appObject.name), appObject.name === ''].some(Boolean)) {\n const msg = `${JSON.stringify(path)}的name为空,这可能由脏数据导致,请报告此错误`;\n logger.error(msg);\n logger.error({appObject});\n throw new Error();\n }\n }\n Object.entries(appObject).forEach(([k, v]) => {\n sanityCheck(v, [...path, k]);\n });\n }\n}\n"],"mappings":"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c;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,eAAe;AAAA,MACjB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","names":["exports","exports","module","path","fs","err","err2","er","er2","exports","module","path","exports","module","exports","module","queue","fs","path","options","cb","data","src","dest","flags","go$readdir","mode","exports","buffer","buffers","exports","module","path","exports","module","exports","module","exports","module","path","exports","module","path","exports","module","path","exports","module","path","destStat","exports","module","path","require_copy","exports","module","exports","module","path","exports","module","path","emptyDir","exports","module","path","exports","module","path","exports","module","path","exists","exports","module","exports","module","path","relative","exports","module","require_utils","exports","module","stringify","exports","module","stringify","readFileSync","require_jsonfile","exports","module","exports","module","path","outputFileSync","exports","module","stringify","exports","module","stringify","outputFileSync","exports","module","exports","module","path","exports","module","path","require_move","exports","module","exports","module","import_axios","import_lodash","import_inversify","import_reflection","import_inversify","pino","l","logger","import_lodash","import_nasl_concepts","import_asserts","breakpoint","import_nasl_concepts","import_lodash","config","module","app","process","import_inversify","import_lodash","import_nasl_concepts","import_nasl_concepts","import_asserts","import_inversify","import_lodash","logics","postcssJs","parserTypeScript","parserHtml","parserBabel","components","routePrefix","path","import_nasl_concepts","logger","import_nasl_concepts","import_nasl_concepts","import_inversify","import_lodash","import_nasl_concepts","logger","s","makeRight","calleeName","args","argsStr","isShowArgument","NaslAsyncFuncMap","getModule","code","destinationToUrlExpr","url","optional","routes","path","importConfigToPropertyStr","logger","children","node","shouldSplit","main","exports","c","logger","initExpr","config","module","logger","b","isView","elementName","x","bindManualBindEventToIR","l","ctx","config","buildConfigs","collectPackages","import_inversify","import_reflection","import_inversify","import_inversify","path","import_inversify","import_inversify","import_path","logger","config","path","s","config","l","logger","import_inversify","config","import_inversify","import_reflection","import_inversify","import_inversify","import_lodash","logger","import_inversify","import_nasl_concepts","import_nasl_concepts","import_inversify","logger","name","import_asserts","import_inversify","logger","name","res","import_inversify","logger","c","import_reflection","import_inversify","config","config","logger","import_asserts","logger","config","path","axios","sources","logger","config","import_reflection","import_inversify","config","config","import_inversify","import_nasl_utils","import_inversify","routes","path","config","import_inversify","import_nasl_utils","import_lodash","import_inversify","import_inversify","config","import_inversify","import_inversify","import_inversify","import_inversify","import_inversify","path","config","logger","needCompileViews","config","logger","codeList","axios","response","path","config","logger","axios","import_inversify","node","config","import_inversify","NameMangler","config","NameMangler","import_lodash","logger","sanityCheck","path","logger","sanityCheck"]}
|