{"version":3,"sources":["jsdelivr-header.js","/projects/ngx-bit/common/bit-config.ts","/node_modules/tslib/tslib.es6.js","/projects/ngx-bit/common/utils/list-by-page.ts","/projects/ngx-bit/common/bit-http.service.ts","/projects/ngx-bit/common/bit-curd.service.ts","/projects/ngx-bit/common/bit.service.ts","/projects/ngx-bit/common/bit-curd-common.service.ts","/projects/ngx-bit/bit.module.ts"],"names":[],"mappings":"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","file":"/npm/ngx-bit@12.0.0-beta.2/bundles/ngx-bit.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/ngx-bit@12.0.0-beta.2/bundles/ngx-bit.umd.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { Injectable } from '@angular/core';\r\nimport { CurdOption, I18nOption, UploadStorage } from './types';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BitConfig {\r\n  url: {\r\n    api: string;\r\n    static: string;\r\n    icon?: string;\r\n  };\r\n  api: {\r\n    namespace: string;\r\n    withCredentials: boolean;\r\n    upload: string;\r\n    uploadStorage?: UploadStorage;\r\n    uploadFetchSigned?: string;\r\n    uploadFetchSignedMethod?: string;\r\n    uploadSize?: number;\r\n  };\r\n  curd: CurdOption;\r\n  col: {\r\n    [key: string]: any;\r\n  };\r\n  locale: {\r\n    default: string;\r\n    mapping: string[];\r\n    bind: any[];\r\n  };\r\n  i18n: {\r\n    default: string;\r\n    contain: string[];\r\n    switch: I18nOption[];\r\n  };\r\n  page: number;\r\n  query: 'sql-orm' | 'mongo' | 'cloud';\r\n}\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { AsyncSubject, Observable } from 'rxjs';\r\nimport { ListByPageOption, SearchOption, OrderOption } from '../types';\r\nimport { BitCurdService } from '../bit-curd.service';\r\nimport { StorageMap } from '@ngx-pwa/local-storage';\r\n\r\nexport class ListByPage {\r\n  /**\r\n   * 完成初始化\r\n   * Complete initialization\r\n   */\r\n  ready: AsyncSubject<any> = new AsyncSubject<any>();\r\n\r\n  /**\r\n   * 搜索字段定义\r\n   * Search field definition\r\n   */\r\n  search: { [field: string]: SearchOption } = {};\r\n\r\n  /**\r\n   * 排序字段定义\r\n   * Sort field definition\r\n   */\r\n  order: OrderOption;\r\n\r\n  /**\r\n   * 分页数据\r\n   * Paging data\r\n   */\r\n  data: any[] = [];\r\n\r\n  /**\r\n   * 加载状态\r\n   * Loading status\r\n   */\r\n  loading = true;\r\n\r\n  /**\r\n   * 分页限制\r\n   * Paging limit\r\n   */\r\n  limit = 0;\r\n\r\n  /**\r\n   * 分页总数\r\n   * Total number of pages\r\n   */\r\n  totals = 0;\r\n\r\n  /**\r\n   * 分页页码\r\n   * Pagination page number\r\n   */\r\n  index = 1;\r\n\r\n  /**\r\n   * 是否全被选中\r\n   * Are all selected\r\n   */\r\n  checked = false;\r\n\r\n  /**\r\n   * 是否不完全被选中\r\n   * Is it not completely selected\r\n   */\r\n  indeterminate = false;\r\n\r\n  /**\r\n   * 是否可进行批量处理\r\n   * Whether it can be batch processed\r\n   */\r\n  batch = false;\r\n\r\n  /**\r\n   * 被选中的数量\r\n   * Number selected\r\n   */\r\n  checkedNumber = 0;\r\n\r\n  constructor(\r\n    private curd: BitCurdService,\r\n    private storage: StorageMap,\r\n    private option: ListByPageOption\r\n  ) {\r\n    this.limit = option.limit;\r\n    this.order = option.order;\r\n    this.storage.get('search:' + option.id).subscribe((data: any) => {\r\n      if (!data) {\r\n        for (const value of option.query) {\r\n          this.search[value.field] = value;\r\n        }\r\n      } else {\r\n        this.search = data;\r\n      }\r\n      this.ready.next(data);\r\n      this.ready.complete();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * 设置数据\r\n   * Set data\r\n   */\r\n  setData(data: any[]): void {\r\n    this.data = data;\r\n  }\r\n\r\n  /**\r\n   * 判断是否包含该字段的搜索条件\r\n   * Determine whether to include the search criteria of the field\r\n   */\r\n  hasSearch(field: string): boolean {\r\n    return this.search.hasOwnProperty(field);\r\n  }\r\n\r\n  /**\r\n   * 主动触发搜索变动之后\r\n   * After actively triggering the search change\r\n   */\r\n  afterSearch(): Observable<any> {\r\n    return this.storage.set('search:' + this.option.id, this.search);\r\n  }\r\n\r\n  /**\r\n   * 主动触发搜索清空之后\r\n   * After actively triggering search and clearing\r\n   */\r\n  clearSearch(reset: any = {}): Observable<any> {\r\n    for (const key in this.search) {\r\n      if (this.search.hasOwnProperty(key)) {\r\n        const search = this.search[key];\r\n        if (reset.hasOwnProperty(search.field)) {\r\n          search.value = reset[search.field];\r\n        } else {\r\n          search.value = '';\r\n        }\r\n      }\r\n    }\r\n    return this.storage.delete('search:' + this.option.id);\r\n  }\r\n\r\n  /**\r\n   * 更新分页列表状态\r\n   * Update the status of the paging list\r\n   */\r\n  refreshStatus(): void {\r\n    const allChecked = this.data.every((value) => value.checked === true);\r\n    const allUnchecked = this.data.every((value) => !value.checked);\r\n    this.checked = this.data.length !== 0 && allChecked;\r\n    this.indeterminate = !allChecked && !allUnchecked;\r\n    this.batch = this.checked || this.indeterminate;\r\n    this.checkedNumber = this.data.filter((value) => value.checked).length;\r\n  }\r\n\r\n  /**\r\n   * 更改所有分页列表选中状态\r\n   * Change the selected state of all tabbed lists\r\n   */\r\n  checkedAll(event: boolean): void {\r\n    this.data.forEach((data) => (data.checked = event));\r\n    this.refreshStatus();\r\n  }\r\n\r\n  /**\r\n   * 返回所有被选中的列表\r\n   * Return all selected lists\r\n   */\r\n  getChecked(): any[] {\r\n    return this.data.filter(value => value.checked);\r\n  }\r\n\r\n  /**\r\n   * 获取当前的页码\r\n   * Get the current page number\r\n   */\r\n  getPage(): Observable<any> {\r\n    return this.storage.get('page:' + this.option.id);\r\n  }\r\n\r\n  /**\r\n   * 主动执行分页页码的持久化记录\r\n   * Actively execute persistent records of paging page numbers\r\n   */\r\n  persistence(): void {\r\n    this.storage.set('page:' + this.option.id, this.index).subscribe(_ => _);\r\n  }\r\n\r\n  /**\r\n   * 返回查询定义数组\r\n   * Return query definition array\r\n   */\r\n  toQuery(): SearchOption[] {\r\n    return Object.values(this.search);\r\n  }\r\n\r\n  /**\r\n   * 返回查询语句\r\n   * Return query statement\r\n   */\r\n  toQuerySchema(): any[] {\r\n    return this.curd.getQuerySchema(this.toQuery());\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, OperatorFunction } from 'rxjs';\r\nimport { BitConfig } from './bit-config';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BitHttpService {\r\n  /**\r\n   * 基础路径\r\n   * base URL\r\n   */\r\n  readonly baseUri: string;\r\n  /**\r\n   * 是否同源\r\n   */\r\n  readonly withCredentials: boolean;\r\n  /**\r\n   * 请求拦截器\r\n   * Http interceptor\r\n   */\r\n  private interceptor: OperatorFunction<any, any>;\r\n\r\n  constructor(\r\n    bitConfig: BitConfig,\r\n    private http: HttpClient\r\n  ) {\r\n    this.baseUri = bitConfig.url.api + bitConfig.api.namespace + '/';\r\n    this.withCredentials = bitConfig.api.withCredentials;\r\n  }\r\n\r\n  /**\r\n   * 设置请求拦截器\r\n   * Http interceptor\r\n   */\r\n  setupInterceptor(operate: OperatorFunction<any, any>): void {\r\n    this.interceptor = operate;\r\n  }\r\n\r\n  /**\r\n   * 发起请求客户端\r\n   * Http client\r\n   */\r\n  req(url: string, body: any = {}, method = 'post'): Observable<any> {\r\n    let httpClient = this.http.request(method, this.baseUri + url,\r\n      {\r\n        body,\r\n        withCredentials: this.withCredentials\r\n      }\r\n    );\r\n    if (this.interceptor) {\r\n      httpClient = httpClient.pipe(this.interceptor);\r\n    }\r\n    return httpClient;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CurdOption, QueryMode, SearchOption } from './types';\r\nimport { BitHttpService } from './bit-http.service';\r\nimport { BitConfig } from './bit-config';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BitCurdService {\r\n  /**\r\n   * 查询模式\r\n   * Query mode\r\n   */\r\n  readonly mode: QueryMode;\r\n  /**\r\n   * 通用接口定义\r\n   * General interface definition\r\n   */\r\n  protected curd: CurdOption;\r\n\r\n  constructor(\r\n    bitConfig: BitConfig,\r\n    protected http: BitHttpService\r\n  ) {\r\n    this.mode = bitConfig.query;\r\n    this.curd = bitConfig.curd;\r\n  }\r\n\r\n  /**\r\n   * 获取查询语句\r\n   * Get query statement\r\n   */\r\n  getQuerySchema(options: SearchOption[]): any[] {\r\n    switch (this.mode) {\r\n      case 'sql-orm':\r\n        return this.common(options);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * mode: sql-orm\r\n   * php: Laravel ORM(Laravel,Lumen,Hyperf), ThinkPHP ORM\r\n   *  - https://github.com/kainonly/think-bit\r\n   *  - https://github.com/kainonly/hyperf-curd\r\n   * golang: https://github.com/kainonly/gin-curd\r\n   */\r\n  protected common(options: SearchOption[]): any[] {\r\n    const schema = [];\r\n    for (const search of options) {\r\n      if (\r\n        search.value !== null &&\r\n        typeof search.value === 'object' &&\r\n        Object.keys(search.value).length === 0\r\n      ) {\r\n        continue;\r\n      }\r\n      if (typeof search.value === 'string') {\r\n        search.value = search.value.trim();\r\n      }\r\n      const exclude = search.exclude ? search.exclude : ['', 0, null];\r\n      if (!exclude.includes(search.value)) {\r\n        let value = search.value;\r\n        if (search.op === 'like') {\r\n          value = `%${value}%`;\r\n        }\r\n        if (search.format !== undefined && search.format === 'unixtime') {\r\n          value = Array.isArray(value) ?\r\n            value.map(v => Math.trunc(v.getTime() / 1000)) : Math.trunc(value.getTime() / 1000);\r\n        }\r\n        schema.push([search.field, search.op, value]);\r\n      }\r\n    }\r\n    return schema;\r\n  }\r\n}\r\n","import { Injectable, Optional } from '@angular/core';\nimport { NavigationExtras, PRIMARY_OUTLET, Router, UrlSegment } from '@angular/router';\nimport { NzI18nService } from 'ng-zorro-antd/i18n';\nimport { Location } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { BitConfig } from './bit-config';\nimport { ListByPageOption, I18nGroupOption, I18nTooltipOption, I18nOption } from './types';\nimport { ListByPage } from './utils/list-by-page';\nimport { BitCurdService } from './bit-curd.service';\nimport { StorageMap } from '@ngx-pwa/local-storage';\nimport { filter, switchMap } from 'rxjs/operators';\n\n@Injectable({ providedIn: 'root' })\nexport class BitService {\n  /**\n   * 静态资源地址\n   * Static resource address\n   */\n  readonly static: string;\n  /**\n   * 上传地址\n   * Upload address\n   */\n  readonly uploads: string;\n  /**\n   * 公共语言包\n   * Common language pack\n   */\n  private language: Map<string, any> = new Map();\n  /**\n   * 默认语言包 ID\n   * Default language ID\n   */\n  readonly localeDefault: string;\n  /**\n   * 语言包 ID 索引\n   * Language ID index\n   */\n  readonly localeMapping: string[];\n  /**\n   * 语言包 ID 与 NG-ZORRO 语言包关联\n   * Language ID associated with NG-ZORRO language\n   */\n  readonly localeBind: any[];\n  /**\n   * 语言包 ID\n   * Language ID\n   */\n  locale: string;\n  /**\n   * 语言包 ID 状态\n   * Language ID changed\n   */\n  readonly localeChanged: Subject<string> = new Subject<string>();\n  /**\n   * 语言包引用\n   * Language pack reference\n   */\n  l: any = {};\n  /**\n   * 默认国际化 ID，^ 国际化是面向表单输入的\n   * Default I18n ID, ^ I18n is for form input\n   */\n  readonly i18nDefault: string;\n  /**\n   * 国际化 ID\n   * I18n ID\n   */\n  i18n: string;\n  /**\n   * 国际化 ID 状态\n   * I18n ID changed\n   */\n  readonly i18nChanged: Subject<string> = new Subject<string>();\n  /**\n   * 国际化包含语言 ID\n   * I18n includes languages ID\n   */\n  i18nContain: any[] = [];\n  /**\n   * 国际化详情\n   * I18n Detail\n   */\n  i18nSwitch: I18nOption[];\n  /**\n   * 国际化输入提示状态\n   * I18n tooltip status\n   */\n  i18nTooltip: I18nTooltipOption = {};\n  /**\n   * 默认分页限制\n   * Default Page Limit\n   */\n  readonly pageDefault: number;\n\n  constructor(\n    bitConfig: BitConfig,\n    @Optional() private curd: BitCurdService,\n    @Optional() private storage: StorageMap,\n    @Optional() private router: Router,\n    @Optional() private location: Location,\n    @Optional() private nzI18nService: NzI18nService\n  ) {\n    this.static = bitConfig.url.static;\n    this.uploads = bitConfig.url.api + bitConfig.api.upload;\n    this.localeDefault = bitConfig.locale.default;\n    this.localeMapping = bitConfig.locale.mapping;\n    this.localeBind = bitConfig.locale.bind;\n    this.i18nDefault = bitConfig.i18n.default;\n    this.i18n = bitConfig.i18n.default;\n    this.i18nContain = bitConfig.i18n.contain;\n    this.i18nSwitch = bitConfig.i18n.switch;\n    this.pageDefault = bitConfig.page;\n  }\n\n  /**\n   * 路由导航\n   * Route navigation\n   */\n  open(path: any[], extras?: NavigationExtras): void {\n    if (path.length === 0) {\n      return;\n    }\n    const url = this.router.url;\n    if (url !== '/') {\n      const primary = this.router.parseUrl(url).root.children[PRIMARY_OUTLET];\n      const segments = primary.segments;\n      if (segments.length > 1) {\n        const key = segments[0].path;\n        this.storage.set('history:' + key, segments.splice(1)).subscribe(_ => _);\n      }\n    }\n    const commands = [];\n    path.forEach(value => {\n      if (typeof value === 'string') {\n        commands.push(...value.split('/'));\n      } else {\n        commands.push(value);\n      }\n    });\n    this.router.navigate(commands, extras);\n  }\n\n  /**\n   * 导航历史\n   * Navigation history\n   */\n  history(key: string): void {\n    this.storage.get('history:' + key).subscribe((segments: UrlSegment[]) => {\n      const commands = [key];\n      if (segments && segments.length !== 0) {\n        commands.push(...segments.map(v => v.path));\n        this.storage.delete('history:' + key).subscribe(_ => _);\n      }\n      this.router.navigate(commands);\n    });\n  }\n\n  /**\n   * 导航返回\n   * Navigate back\n   */\n  back(): void {\n    this.location.back();\n    this.resetI18n();\n  }\n\n  /**\n   * 初始化语言包\n   * Setup language pack\n   */\n  setupLocale(): void {\n    this.l = {};\n    this.setLocale(localStorage.getItem('locale') || this.localeDefault);\n  }\n\n  /**\n   * 载入语言包\n   * Registered language pack\n   */\n  registerLocales(packer: object | Promise<any>): void {\n    Promise.resolve(packer).then(result => {\n      if (!result.default) {\n        return;\n      }\n      this.language = new Map([...this.language, ...Object.entries(result.default)]);\n      const index = this.localeDefault.indexOf(this.locale);\n      for (const [key, data] of this.language.entries()) {\n        this.l[key] = data[index];\n      }\n    });\n  }\n\n  /**\n   * 设置语言包 ID\n   * Set language ID\n   */\n  setLocale(locale: string): void {\n    this.locale = locale;\n    localStorage.setItem('locale', locale);\n    const index = this.localeMapping.indexOf(this.locale);\n    for (const [key, data] of this.language.entries()) {\n      this.l[key] = data[index];\n    }\n    this.nzI18nService.setLocale(this.localeBind[index]);\n    this.localeChanged.next(locale);\n  }\n\n  /**\n   * 国际化 ID 是否相等\n   * Are the I18n IDs equal\n   */\n  equalI18n(i18n: string): boolean {\n    return this.i18n === i18n;\n  }\n\n  /**\n   * 重置国际化 ID\n   * Reset I18n ID\n   */\n  resetI18n(): void {\n    this.i18n = this.i18nDefault;\n  }\n\n  /**\n   * 生成 I18n FormGroup\n   * Generate I18n FormGroup\n   */\n  i18nGroup(options: I18nGroupOption): any {\n    const controls = {};\n    if (options) {\n      for (const ID of this.i18nContain) {\n        controls[ID] = [null, [], []];\n        if (options.value !== undefined && options.value.hasOwnProperty(ID)) {\n          controls[ID][0] = options.value[ID];\n        }\n        if (options.validate !== undefined && options.validate.hasOwnProperty(ID)) {\n          controls[ID][1] = options.validate[ID];\n        }\n        if (options.asyncValidate !== undefined && options.asyncValidate.hasOwnProperty(ID)) {\n          controls[ID][2] = options.asyncValidate[ID];\n        }\n      }\n    }\n    return controls;\n  }\n\n  /**\n   * 解析国际化数据\n   * Parse i18n string json\n   */\n  i18nParse(text: string): any {\n    const json: any = JSON.parse(text);\n    const data: any = {};\n    for (const ID of this.i18nContain) {\n      if (json.hasOwnProperty(ID)) {\n        data[ID] = json[ID];\n      }\n    }\n    return data;\n  }\n\n  /**\n   * 生产分页数据对象\n   * Factory list by page\n   */\n  listByPage(option: ListByPageOption): ListByPage {\n    option.limit = option.limit || this.pageDefault;\n    return new ListByPage(this.curd, this.storage, option);\n  }\n\n  /**\n   * 清除应用本地存储\n   * Clear app local storage\n   */\n  clear(): void {\n    this.storage.keys().pipe(\n      filter(v =>\n        ['resource', 'router'].includes(v) ||\n        v.search(/^search:\\S+$/) !== -1 ||\n        v.search(/^page:\\S+$/) !== -1 ||\n        v.search(/^cross:\\S+$/) !== -1\n      ),\n      switchMap(key => this.storage.delete(key))\n    ).subscribe(_ => _);\n  }\n}\n","import { Injectable } from '@angular/core';\r\nimport { CurdInterface, ListsOption, OrderOption, SearchOption } from './types';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { ListByPage } from './utils/list-by-page';\r\nimport { BitCurdService } from './bit-curd.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BitCurdCommonService extends BitCurdService implements CurdInterface {\r\n  /**\r\n   * 获取单条数据请求\r\n   * Get a single data request\r\n   */\r\n  get(model: string, condition: number | string | SearchOption[], order?: OrderOption, path?: string): Observable<any> {\r\n    let http: Observable<any>;\r\n    const url = path || this.curd.get;\r\n    if (Array.isArray(condition)) {\r\n      http = this.http.req(model + url, {\r\n        where: this.getQuerySchema(condition),\r\n        order\r\n      });\r\n    } else {\r\n      http = this.http.req(model + url, {\r\n        id: condition\r\n      });\r\n    }\r\n    return http.pipe(\r\n      map(res => !res.error ? res.data : null)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * 获取分页数据请求\r\n   * Get pagination data request\r\n   */\r\n  lists(model: string, factory: ListByPage, option: ListsOption, path?: string): Observable<any> {\r\n    const url = path || this.curd.lists;\r\n    if (option.refresh || option.persistence) {\r\n      if (option.refresh) {\r\n        factory.index = 1;\r\n      }\r\n      factory.persistence();\r\n    }\r\n    return factory.getPage().pipe(\r\n      switchMap(index => {\r\n        factory.index = index ? index : 1;\r\n        return this.http.req(model + url, {\r\n          page: {\r\n            limit: factory.limit,\r\n            index: factory.index\r\n          },\r\n          where: factory.toQuerySchema(),\r\n          order: factory.order\r\n        });\r\n      }),\r\n      map(res => {\r\n        factory.totals = !res.error ? res.data.total : 0;\r\n        factory.loading = false;\r\n        factory.checked = false;\r\n        factory.indeterminate = false;\r\n        factory.batch = false;\r\n        factory.checkedNumber = 0;\r\n        return !res.error ? res.data.lists : null;\r\n      })\r\n    );\r\n  }\r\n\r\n  /**\r\n   * 获取原始列表数据请求\r\n   * Get original list data request\r\n   */\r\n  originLists(model: string, condition: SearchOption[] = [], order?: OrderOption, path?: string): Observable<any> {\r\n    const url = path || this.curd.originLists;\r\n    return this.http.req(model + url, {\r\n      where: this.getQuerySchema(condition),\r\n      order\r\n    }).pipe(\r\n      map(res => !res.error ? res.data : null)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * 新增数据请求\r\n   * New data request\r\n   */\r\n  add(model: string, data: any, path?: string): Observable<any> {\r\n    const url = path || this.curd.add;\r\n    return this.http.req(model + url, data);\r\n  }\r\n\r\n  /**\r\n   * 修改数据请求\r\n   * Modify data request\r\n   */\r\n  edit(model: string, data: any, condition?: SearchOption[], path?: string): Observable<any> {\r\n    const url = path || this.curd.edit;\r\n    data.switch = false;\r\n    return !condition ?\r\n      this.http.req(model + url, data) :\r\n      this.http.req(model + url, Object.assign(data, {\r\n          where: this.getQuerySchema(condition)\r\n        })\r\n      );\r\n  }\r\n\r\n  /**\r\n   * 状态切换请求\r\n   * State switch request\r\n   */\r\n  status(model: string, data: any, field = 'status', extra?: any, path?: string): Observable<any> {\r\n    const url = path || this.curd.status;\r\n    const body = {\r\n      id: data.id,\r\n      switch: true,\r\n      [field]: !data[field]\r\n    };\r\n    if (extra !== undefined) {\r\n      Object.assign(body, extra);\r\n    }\r\n    return this.http.req(model + url, body).pipe(\r\n      map((res) => {\r\n        if (!res.error) {\r\n          data[field] = !data[field];\r\n        }\r\n        return res;\r\n      })\r\n    );\r\n  }\r\n\r\n  /**\r\n   * 删除数据请求\r\n   * Delete data request\r\n   */\r\n  delete(model: string, id?: any[], condition?: SearchOption[], path?: string): Observable<any> {\r\n    const url = path || this.curd.delete;\r\n    if (id !== undefined) {\r\n      return this.http.req(model + url, {\r\n        id\r\n      });\r\n    }\r\n    if (condition !== undefined) {\r\n      return this.http.req(model + url, {\r\n        where: this.getQuerySchema(condition)\r\n      });\r\n    }\r\n    return of(false);\r\n  }\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { NzIconService } from 'ng-zorro-antd/icon';\r\nimport { BitService } from './common/bit.service';\r\nimport { BitHttpService } from './common/bit-http.service';\r\nimport { BitConfig } from './common/bit-config';\r\nimport { StorageMap } from '@ngx-pwa/local-storage';\r\n\r\n@NgModule()\r\nexport class BitModule {\r\n  static forRoot(config: BitConfig): ModuleWithProviders<BitModule> {\r\n    return {\r\n      ngModule: BitModule,\r\n      providers: [\r\n        {\r\n          provide: BitConfig,\r\n          useValue: config\r\n        },\r\n        BitService,\r\n        BitHttpService,\r\n        NzIconService,\r\n        StorageMap\r\n      ]\r\n    };\r\n  }\r\n\r\n  constructor(\r\n    config: BitConfig,\r\n    nzIcon: NzIconService\r\n  ) {\r\n    nzIcon.changeAssetsSource(config?.url?.icon);\r\n  }\r\n}\r\n"]}