@looker/wholly-artifact 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/lib/RowModel.js.map +1 -1
- package/lib/WhollyArtifact.js.map +1 -1
- package/lib/esm/RowModel.js +17 -32
- package/lib/esm/RowModel.js.map +1 -1
- package/lib/esm/WhollyArtifact.js +29 -38
- package/lib/esm/WhollyArtifact.js.map +1 -1
- package/lib/esm/index.js +2 -27
- package/lib/esm/index.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -62,6 +62,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
62
62
|
* devDependencies
|
|
63
63
|
* @looker/sdk-node bumped from 23.12.0 to 23.14.1
|
|
64
64
|
|
|
65
|
+
### Dependencies
|
|
66
|
+
|
|
67
|
+
* The following workspace dependencies were updated
|
|
68
|
+
* dependencies
|
|
69
|
+
* @looker/sdk bumped from 23.14.1 to 23.16.0
|
|
70
|
+
* devDependencies
|
|
71
|
+
* @looker/sdk-node bumped from 23.14.1 to 23.16.0
|
|
72
|
+
|
|
73
|
+
### Dependencies
|
|
74
|
+
|
|
75
|
+
* The following workspace dependencies were updated
|
|
76
|
+
* dependencies
|
|
77
|
+
* @looker/sdk bumped from 23.16.0 to 23.18.0
|
|
78
|
+
* devDependencies
|
|
79
|
+
* @looker/sdk-node bumped from 23.16.0 to 23.18.0
|
|
80
|
+
|
|
65
81
|
## [0.1.2](https://github.com/looker-open-source/sdk-codegen/compare/wholly-artifact-v0.1.1...wholly-artifact-v0.1.2) (2023-03-09)
|
|
66
82
|
|
|
67
83
|
|
package/lib/RowModel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowModel.js","names":["_uuid","require","_sdkRtl","_omit","_interopRequireDefault","obj","__esModule","default","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","noDate","Date","exports","APP_JSON","nilCell","addMinutes","date","minutes","getTime","stringer","toISOString","toString","rowPosition","RowAction","RowModel","constructor","values","version","None","initValues","makey","$_action","Create","isNew","$artifact","isStored","initFromArray","Array","isArray","header","val","index","typeCast","nested","JSON","parse","e","_values$$artifact","_values$$artifact$con","content_type","localeCompare","sensitivity","LookerSDKError","concat","k","decodeURI","tableName","name","uuidv4","_id","oops","message","$action","Delete","Update","setCreate","setUpdate","setDelete","result","v","startsWith","hide","has","displayHeader","prepare","_updated","type","fromType","isInt","match","parseInt","parseFloat","boolDefault","split","assign","validate","toObject","omit","fromObject","fromArtifact","storageValues","encodeURI","toArtifact","_this$$artifact$versi","stringify","Set"],"sources":["../src/RowModel.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport { v4 as uuidv4 } from 'uuid'\nimport { boolDefault, LookerSDKError } from '@looker/sdk-rtl'\nimport omit from 'lodash/omit'\nimport type { IArtifact, IUpdateArtifact } from '@looker/sdk'\nexport type SheetValues = any[]\n\nexport const noDate = new Date(-8640000000000000)\nexport const APP_JSON = 'application/json'\n\n/** Signifies an empty cell */\nexport const nilCell = '\\0'\n\nexport const addMinutes = (date: Date, minutes: number) => {\n return new Date(date.getTime() + minutes * 60000)\n}\n\n/** Convert a value to the string representation for a cell value */\nexport const stringer = (value: any) => {\n if (value === undefined || value === null) return nilCell\n if (value instanceof Date) {\n if (value === noDate) return nilCell\n return value.toISOString()\n }\n return value.toString()\n}\n\n/** Key/value pairs for tab data */\nexport type RowValues = Record<string, any>\n\n/** Sheet (tab) column header definition */\nexport type ColumnHeaders = string[]\n\n/** name of the property that tracks the row's position in the tab sheet */\nexport const rowPosition = '_row'\n\nexport interface IRowValidationError {\n message: string\n type: 'error'\n}\n\nexport type RowValidationErrors = Record<string, IRowValidationError>\n\nexport enum RowAction {\n None,\n Create,\n Update,\n Delete,\n}\n\n/**\n * Includes type-specific properties and base Looker Artifact properties where the JSON\n * data in the artifact value property will be extracted into the type-specific\n * properties of the row model\n */\nexport interface IRowModelProps extends RowValues {\n /** Row position in sheet for this item. Usually assigned in WhollySheet processing */\n _row: number\n /**\n * Unique ID for this row. This is an alias for the artifact's key.\n * It's assigned to a combination type name:UUID in prepare()\n *\n * TODO remove this property entirely after changing the `_id` refs in the Hackathon app to use `key`\n */\n _id: string\n /**\n * Updated date/time stamp for this row. Always set in prepare().\n * TODO remove this property entirely because the artifact `version` property performs the version locking\n */\n _updated: Date\n\n /** Batch update action. Defaults to RowAction.None, so the row is not part of the delta */\n $action: RowAction\n /** Looker API key/value store artifact object for managing this row */\n $artifact: Partial<IArtifact>\n}\n\n/** Keyed data for a sheet row */\nexport interface IRowModel extends IRowModelProps {\n /**\n * Assign a value array or object to the typed row\n *\n * @param values an array of values, or an object with matching keys\n */\n assign(values: any): IRowModel\n\n /** All keys for this object, but overrideable */\n keys(): ColumnHeaders\n\n /** The sheet Column Headers keys for this model */\n header(): ColumnHeaders\n\n /** The display column headers for this model */\n displayHeader(): ColumnHeaders\n\n /** Column values in the correct order to write the entire row to the GSheet */\n values(): SheetValues\n\n /**\n * Prepare the row for saving. This includes auto-generation of _id and updating _update\n * Override this for error handling, calculations, and other default initializations\n * to avoid persisting bad data values to the sheet\n */\n prepare(): IRowModel\n\n /** Returns undefined if no errors, or the error messages with keys corresponding to property names */\n validate(): RowValidationErrors | undefined\n\n /**\n * Convert a cell to the declared type of the keyed property\n * @param key name of property to receive the value\n * @param value any value representation\n */\n typeCast(key: string, value: any): any\n\n /** Converts instance to plain javascript object */\n toObject(): Record<string, unknown>\n\n /**\n * Converts from plain javascript object to class instance\n * @param obj to assign to row. Uses properties of the same name\n */\n fromObject(obj: Record<string, unknown>): IRowModel\n\n /** Converts instance to IArtifact javascript object for storing in a Looker instance\n * the required columns are:\n * - key: unique key identifying this item, automatically managed\n * - value: IRowModel descendant nested properties with values from the `headers` keys\n * - version: version number of the artifact\n * - content_type: for WhollyArtifacts, always \"application/json\"\n */\n toArtifact(): Partial<IUpdateArtifact>\n\n /** Converts from IArtifact interface to class instance\n *\n * @param obj to assign to row\n */\n fromArtifact(obj: Partial<IArtifact>): IRowModel\n\n /** Mark a row for update. Sets the $action and returns true if the row can be marked for updating. Throws error otherwise */\n setUpdate(): boolean\n\n /** Mark a row for deletion. Sets the $action and returns true if the row can be marked for deleting. Throws error otherwise */\n setDelete(): boolean\n\n /** Mark a row for creation. Sets the $action and returns true if the row can be marked for creating. Throws error otherwise */\n setCreate(): boolean\n\n /** True if this item has NOT been saved to the artifact store. False otherwise */\n isNew(): boolean\n\n /** True if this item HAS been saved to the artifact store. False otherwise */\n isStored(): boolean\n\n /** Namespace of artifact storage bucket to use for this collection */\n namespace(): string\n\n /**\n * RowModel prefix to use for generating new key values. For example, a prefix() that returns `Hackathon` would\n * result in a key assignment like `Hackathon:9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d`\n *\n * When using artifact collections like data tables, artifact key values are intended to be hidden from the UI.\n * This prefix is purely used for making it feasible to query an artifact collection by its prefix key value\n * Must be implemented.\n */\n tableName(): string\n\n /**\n * Combines prefix() with a UUID to create a filterable key pattern\n * makey makey!\n */\n makey(): string\n}\n\nexport abstract class RowModel<T extends IRowModel> implements IRowModel {\n _row = 0\n _id = ''\n _updated: Date = noDate\n\n $artifact: Partial<IArtifact> = {\n version: 0,\n }\n\n constructor(values?: any) {\n this.initValues(values)\n if (!this.key) {\n this.key = this.makey()\n this.$_action = RowAction.Create\n }\n }\n\n isNew() {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.$artifact.version! < 1\n }\n\n isStored() {\n return !this.isNew()\n }\n\n private $_action: RowAction = RowAction.None\n\n private static hide = new Set(['_row'])\n\n /**\n * initializes values by position, iterating the header keys\n * @param values to initialize\n * @private\n */\n private initFromArray(values?: any) {\n if (Array.isArray(values)) {\n const keys = this.header()\n if (Array.isArray(values)) {\n // Assign by position\n values.forEach((val, index) => {\n if (val !== undefined && val !== null && index < keys.length) {\n const key = keys[index]\n this[key] = this.typeCast(key, val)\n }\n })\n }\n return true\n }\n return false\n }\n\n /**\n * Initializes values from any of:\n * - an array\n * - a value object\n * - an artifact object\n * @param values to initialize\n * @private\n */\n private initValues(values?: any) {\n if (this.initFromArray(values)) return\n if (typeof values === 'object' && values !== null && values !== undefined) {\n const nested = 'value' in values\n let value = nested ? values.value : values\n if (nested) {\n this.$artifact = values\n }\n if (typeof value === 'string') {\n try {\n value = JSON.parse(value)\n } catch (e: any) {\n if (\n values.$artifact?.content_type?.localeCompare(APP_JSON, 'en', {\n sensitivity: 'base',\n }) === 0\n ) {\n throw new LookerSDKError(`Expected ${APP_JSON} but got ${e}`)\n } else {\n throw new LookerSDKError(e)\n }\n }\n }\n Object.keys(value).forEach((k) => {\n this[k] = this.typeCast(k, value[k])\n if (typeof this[k] === 'string') {\n this[k] = decodeURI(this[k])\n }\n })\n if (values.key) this.key = values.key\n return true\n }\n return false\n }\n\n /**\n * RowModel prefix to use for generating new key values. For example, a prefix() that returns `Hackathon` would\n * result in a key assignment like `Hackathon:9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d`\n *\n * When using artifact collections like data tables, artifact key values are intended to be hidden from the UI.\n * This prefix is purely used for making it feasible to query an artifact collection by its prefix key value\n */\n tableName() {\n return this.constructor.name\n }\n\n makey() {\n return `${this.tableName()}:${uuidv4()}`\n }\n\n get key() {\n return this._id\n }\n\n set key(value) {\n this._id = value\n this.$artifact.key = value\n }\n\n private oops(message: string) {\n throw new LookerSDKError(`${this.key}: ${message}`)\n }\n\n get $action(): RowAction {\n if (this.$_action === RowAction.None && this.isNew())\n return RowAction.Create\n return this.$_action\n }\n\n set $action(value: RowAction) {\n switch (value) {\n case RowAction.Create: {\n if (this.isStored()) this.oops(`can't create an existing item`)\n break\n }\n case RowAction.Delete: {\n if (this.isNew()) {\n this.oops(`can't delete a new item`)\n }\n break\n }\n case RowAction.Update: {\n if (this.isNew()) {\n this.oops(`can't update a new item`)\n }\n break\n }\n case RowAction.None: {\n if (this.isNew()) {\n this.oops(`Action must be assigned for a new item`)\n }\n break\n }\n }\n this.$_action = value\n }\n\n setCreate(): boolean {\n this.$action = RowAction.Create\n return true\n }\n\n setUpdate(): boolean {\n this.$action = RowAction.Update\n return true\n }\n\n setDelete(): boolean {\n this.$action = RowAction.Delete\n return true\n }\n\n keys(): ColumnHeaders {\n return Object.keys(this)\n }\n\n header(): ColumnHeaders {\n const keys = this.keys()\n const result = keys.filter(\n (v) => !(v.startsWith('$') || RowModel.hide.has(v))\n )\n return result\n }\n\n displayHeader(): ColumnHeaders {\n return this.header().filter(\n (v) => !(v.startsWith('_') || RowModel.hide.has(v))\n )\n }\n\n prepare(): T {\n if (!this.key) {\n // Generate id if not assigned\n this.key = this.makey()\n this.$action = RowAction.Create\n }\n /** Always update the \"updated\" value before saving */\n this._updated = new Date()\n return this as unknown as T\n }\n\n values() {\n const result: SheetValues = []\n const keys = this.header()\n keys.forEach((key) => {\n result.push(stringer(this[key]))\n })\n return result\n }\n\n typeCast(key: string, value: any) {\n if (value === undefined || value === null) value = ''\n const type = typeof this[key]\n const fromType = typeof value\n if (type === fromType) {\n // No conversion required\n return value\n }\n if (type === 'string') {\n return value.toString()\n }\n if (type === 'number') {\n if (value === '') return 0\n const isInt = /^([+-]?[1-9]\\d*|0)$/\n if (value.toString().match(isInt)) {\n return parseInt(value, 10)\n }\n return parseFloat(value)\n }\n if (type === 'boolean') {\n return boolDefault(value, false)\n }\n if (this[key] instanceof Date) {\n if (value) return new Date(value)\n return noDate\n }\n if (Array.isArray(this[key])) {\n if (!value) return []\n return value.toString().split(',')\n }\n return value\n }\n\n assign(values: any): T {\n if (values) {\n this.initValues(values)\n }\n return this as unknown as T\n }\n\n /** default to no errors */\n validate(): RowValidationErrors | undefined {\n return undefined\n }\n\n toObject(): Record<string, unknown> {\n return omit({ ...this }, ['$_action'])\n }\n\n fromObject(obj: Record<string, unknown>): IRowModel {\n return this.assign(obj)\n }\n\n fromArtifact(obj: Partial<IArtifact>): IRowModel {\n return this.assign(obj)\n }\n\n /**\n * Values to store in attribute\n *\n * All string values are stored with encodeURI to prevent character encoding issues\n * @private\n */\n private storageValues() {\n const result = {}\n // TODO after migrating from sheets, use `key` as this.keyColumn rather than `_id` and use displayHeader()\n // const keys = this.displayHeader()\n const keys = this.header()\n for (const key of keys) {\n const val =\n typeof this[key] === 'string' ? encodeURI(this[key]) : this[key]\n result[key] = val\n }\n return result\n }\n\n toArtifact(): Partial<IUpdateArtifact> {\n return {\n key: this.key,\n value: JSON.stringify(this.storageValues()),\n version: this.$artifact.version ?? 0,\n content_type: APP_JSON,\n } as Partial<IArtifact>\n }\n\n abstract namespace(): string\n}\n\n// TODO figure out the TypeScript magic for this to work\nexport type RowModelFactory<T extends IRowModel> = { new (values?: any): T }\n\n// export const RowModelCreator: RowModelFactory<IRowModel> = (values?: any) =>\n// new RowModel(values)\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RowModel.js","names":["_uuid","require","_sdkRtl","_omit","_interopRequireDefault","obj","__esModule","default","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","noDate","Date","exports","APP_JSON","nilCell","addMinutes","date","minutes","getTime","stringer","toISOString","toString","rowPosition","RowAction","RowModel","constructor","values","version","None","initValues","makey","$_action","Create","isNew","$artifact","isStored","initFromArray","Array","isArray","header","val","index","typeCast","nested","JSON","parse","e","_values$$artifact","_values$$artifact$con","content_type","localeCompare","sensitivity","LookerSDKError","concat","k","decodeURI","tableName","name","uuidv4","_id","oops","message","$action","Delete","Update","setCreate","setUpdate","setDelete","result","v","startsWith","hide","has","displayHeader","prepare","_updated","type","fromType","isInt","match","parseInt","parseFloat","boolDefault","split","assign","validate","toObject","omit","fromObject","fromArtifact","storageValues","encodeURI","toArtifact","_this$$artifact$versi","stringify","Set"],"sources":["../src/RowModel.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport { v4 as uuidv4 } from 'uuid'\nimport { boolDefault, LookerSDKError } from '@looker/sdk-rtl'\nimport omit from 'lodash/omit'\nimport type { IArtifact, IUpdateArtifact } from '@looker/sdk'\nexport type SheetValues = any[]\n\nexport const noDate = new Date(-8640000000000000)\nexport const APP_JSON = 'application/json'\n\n/** Signifies an empty cell */\nexport const nilCell = '\\0'\n\nexport const addMinutes = (date: Date, minutes: number) => {\n return new Date(date.getTime() + minutes * 60000)\n}\n\n/** Convert a value to the string representation for a cell value */\nexport const stringer = (value: any) => {\n if (value === undefined || value === null) return nilCell\n if (value instanceof Date) {\n if (value === noDate) return nilCell\n return value.toISOString()\n }\n return value.toString()\n}\n\n/** Key/value pairs for tab data */\nexport type RowValues = Record<string, any>\n\n/** Sheet (tab) column header definition */\nexport type ColumnHeaders = string[]\n\n/** name of the property that tracks the row's position in the tab sheet */\nexport const rowPosition = '_row'\n\nexport interface IRowValidationError {\n message: string\n type: 'error'\n}\n\nexport type RowValidationErrors = Record<string, IRowValidationError>\n\nexport enum RowAction {\n None,\n Create,\n Update,\n Delete,\n}\n\n/**\n * Includes type-specific properties and base Looker Artifact properties where the JSON\n * data in the artifact value property will be extracted into the type-specific\n * properties of the row model\n */\nexport interface IRowModelProps extends RowValues {\n /** Row position in sheet for this item. Usually assigned in WhollySheet processing */\n _row: number\n /**\n * Unique ID for this row. This is an alias for the artifact's key.\n * It's assigned to a combination type name:UUID in prepare()\n *\n * TODO remove this property entirely after changing the `_id` refs in the Hackathon app to use `key`\n */\n _id: string\n /**\n * Updated date/time stamp for this row. Always set in prepare().\n * TODO remove this property entirely because the artifact `version` property performs the version locking\n */\n _updated: Date\n\n /** Batch update action. Defaults to RowAction.None, so the row is not part of the delta */\n $action: RowAction\n /** Looker API key/value store artifact object for managing this row */\n $artifact: Partial<IArtifact>\n}\n\n/** Keyed data for a sheet row */\nexport interface IRowModel extends IRowModelProps {\n /**\n * Assign a value array or object to the typed row\n *\n * @param values an array of values, or an object with matching keys\n */\n assign(values: any): IRowModel\n\n /** All keys for this object, but overrideable */\n keys(): ColumnHeaders\n\n /** The sheet Column Headers keys for this model */\n header(): ColumnHeaders\n\n /** The display column headers for this model */\n displayHeader(): ColumnHeaders\n\n /** Column values in the correct order to write the entire row to the GSheet */\n values(): SheetValues\n\n /**\n * Prepare the row for saving. This includes auto-generation of _id and updating _update\n * Override this for error handling, calculations, and other default initializations\n * to avoid persisting bad data values to the sheet\n */\n prepare(): IRowModel\n\n /** Returns undefined if no errors, or the error messages with keys corresponding to property names */\n validate(): RowValidationErrors | undefined\n\n /**\n * Convert a cell to the declared type of the keyed property\n * @param key name of property to receive the value\n * @param value any value representation\n */\n typeCast(key: string, value: any): any\n\n /** Converts instance to plain javascript object */\n toObject(): Record<string, unknown>\n\n /**\n * Converts from plain javascript object to class instance\n * @param obj to assign to row. Uses properties of the same name\n */\n fromObject(obj: Record<string, unknown>): IRowModel\n\n /** Converts instance to IArtifact javascript object for storing in a Looker instance\n * the required columns are:\n * - key: unique key identifying this item, automatically managed\n * - value: IRowModel descendant nested properties with values from the `headers` keys\n * - version: version number of the artifact\n * - content_type: for WhollyArtifacts, always \"application/json\"\n */\n toArtifact(): Partial<IUpdateArtifact>\n\n /** Converts from IArtifact interface to class instance\n *\n * @param obj to assign to row\n */\n fromArtifact(obj: Partial<IArtifact>): IRowModel\n\n /** Mark a row for update. Sets the $action and returns true if the row can be marked for updating. Throws error otherwise */\n setUpdate(): boolean\n\n /** Mark a row for deletion. Sets the $action and returns true if the row can be marked for deleting. Throws error otherwise */\n setDelete(): boolean\n\n /** Mark a row for creation. Sets the $action and returns true if the row can be marked for creating. Throws error otherwise */\n setCreate(): boolean\n\n /** True if this item has NOT been saved to the artifact store. False otherwise */\n isNew(): boolean\n\n /** True if this item HAS been saved to the artifact store. False otherwise */\n isStored(): boolean\n\n /** Namespace of artifact storage bucket to use for this collection */\n namespace(): string\n\n /**\n * RowModel prefix to use for generating new key values. For example, a prefix() that returns `Hackathon` would\n * result in a key assignment like `Hackathon:9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d`\n *\n * When using artifact collections like data tables, artifact key values are intended to be hidden from the UI.\n * This prefix is purely used for making it feasible to query an artifact collection by its prefix key value\n * Must be implemented.\n */\n tableName(): string\n\n /**\n * Combines prefix() with a UUID to create a filterable key pattern\n * makey makey!\n */\n makey(): string\n}\n\nexport abstract class RowModel<T extends IRowModel> implements IRowModel {\n _row = 0\n _id = ''\n _updated: Date = noDate\n\n $artifact: Partial<IArtifact> = {\n version: 0,\n }\n\n constructor(values?: any) {\n this.initValues(values)\n if (!this.key) {\n this.key = this.makey()\n this.$_action = RowAction.Create\n }\n }\n\n isNew() {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.$artifact.version! < 1\n }\n\n isStored() {\n return !this.isNew()\n }\n\n private $_action: RowAction = RowAction.None\n\n private static hide = new Set(['_row'])\n\n /**\n * initializes values by position, iterating the header keys\n * @param values to initialize\n * @private\n */\n private initFromArray(values?: any) {\n if (Array.isArray(values)) {\n const keys = this.header()\n if (Array.isArray(values)) {\n // Assign by position\n values.forEach((val, index) => {\n if (val !== undefined && val !== null && index < keys.length) {\n const key = keys[index]\n this[key] = this.typeCast(key, val)\n }\n })\n }\n return true\n }\n return false\n }\n\n /**\n * Initializes values from any of:\n * - an array\n * - a value object\n * - an artifact object\n * @param values to initialize\n * @private\n */\n private initValues(values?: any) {\n if (this.initFromArray(values)) return\n if (typeof values === 'object' && values !== null && values !== undefined) {\n const nested = 'value' in values\n let value = nested ? values.value : values\n if (nested) {\n this.$artifact = values\n }\n if (typeof value === 'string') {\n try {\n value = JSON.parse(value)\n } catch (e: any) {\n if (\n values.$artifact?.content_type?.localeCompare(APP_JSON, 'en', {\n sensitivity: 'base',\n }) === 0\n ) {\n throw new LookerSDKError(`Expected ${APP_JSON} but got ${e}`)\n } else {\n throw new LookerSDKError(e)\n }\n }\n }\n Object.keys(value).forEach((k) => {\n this[k] = this.typeCast(k, value[k])\n if (typeof this[k] === 'string') {\n this[k] = decodeURI(this[k])\n }\n })\n if (values.key) this.key = values.key\n return true\n }\n return false\n }\n\n /**\n * RowModel prefix to use for generating new key values. For example, a prefix() that returns `Hackathon` would\n * result in a key assignment like `Hackathon:9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d`\n *\n * When using artifact collections like data tables, artifact key values are intended to be hidden from the UI.\n * This prefix is purely used for making it feasible to query an artifact collection by its prefix key value\n */\n tableName() {\n return this.constructor.name\n }\n\n makey() {\n return `${this.tableName()}:${uuidv4()}`\n }\n\n get key() {\n return this._id\n }\n\n set key(value) {\n this._id = value\n this.$artifact.key = value\n }\n\n private oops(message: string) {\n throw new LookerSDKError(`${this.key}: ${message}`)\n }\n\n get $action(): RowAction {\n if (this.$_action === RowAction.None && this.isNew())\n return RowAction.Create\n return this.$_action\n }\n\n set $action(value: RowAction) {\n switch (value) {\n case RowAction.Create: {\n if (this.isStored()) this.oops(`can't create an existing item`)\n break\n }\n case RowAction.Delete: {\n if (this.isNew()) {\n this.oops(`can't delete a new item`)\n }\n break\n }\n case RowAction.Update: {\n if (this.isNew()) {\n this.oops(`can't update a new item`)\n }\n break\n }\n case RowAction.None: {\n if (this.isNew()) {\n this.oops(`Action must be assigned for a new item`)\n }\n break\n }\n }\n this.$_action = value\n }\n\n setCreate(): boolean {\n this.$action = RowAction.Create\n return true\n }\n\n setUpdate(): boolean {\n this.$action = RowAction.Update\n return true\n }\n\n setDelete(): boolean {\n this.$action = RowAction.Delete\n return true\n }\n\n keys(): ColumnHeaders {\n return Object.keys(this)\n }\n\n header(): ColumnHeaders {\n const keys = this.keys()\n const result = keys.filter(\n (v) => !(v.startsWith('$') || RowModel.hide.has(v))\n )\n return result\n }\n\n displayHeader(): ColumnHeaders {\n return this.header().filter(\n (v) => !(v.startsWith('_') || RowModel.hide.has(v))\n )\n }\n\n prepare(): T {\n if (!this.key) {\n // Generate id if not assigned\n this.key = this.makey()\n this.$action = RowAction.Create\n }\n /** Always update the \"updated\" value before saving */\n this._updated = new Date()\n return this as unknown as T\n }\n\n values() {\n const result: SheetValues = []\n const keys = this.header()\n keys.forEach((key) => {\n result.push(stringer(this[key]))\n })\n return result\n }\n\n typeCast(key: string, value: any) {\n if (value === undefined || value === null) value = ''\n const type = typeof this[key]\n const fromType = typeof value\n if (type === fromType) {\n // No conversion required\n return value\n }\n if (type === 'string') {\n return value.toString()\n }\n if (type === 'number') {\n if (value === '') return 0\n const isInt = /^([+-]?[1-9]\\d*|0)$/\n if (value.toString().match(isInt)) {\n return parseInt(value, 10)\n }\n return parseFloat(value)\n }\n if (type === 'boolean') {\n return boolDefault(value, false)\n }\n if (this[key] instanceof Date) {\n if (value) return new Date(value)\n return noDate\n }\n if (Array.isArray(this[key])) {\n if (!value) return []\n return value.toString().split(',')\n }\n return value\n }\n\n assign(values: any): T {\n if (values) {\n this.initValues(values)\n }\n return this as unknown as T\n }\n\n /** default to no errors */\n validate(): RowValidationErrors | undefined {\n return undefined\n }\n\n toObject(): Record<string, unknown> {\n return omit({ ...this }, ['$_action'])\n }\n\n fromObject(obj: Record<string, unknown>): IRowModel {\n return this.assign(obj)\n }\n\n fromArtifact(obj: Partial<IArtifact>): IRowModel {\n return this.assign(obj)\n }\n\n /**\n * Values to store in attribute\n *\n * All string values are stored with encodeURI to prevent character encoding issues\n * @private\n */\n private storageValues() {\n const result = {}\n // TODO after migrating from sheets, use `key` as this.keyColumn rather than `_id` and use displayHeader()\n // const keys = this.displayHeader()\n const keys = this.header()\n for (const key of keys) {\n const val =\n typeof this[key] === 'string' ? encodeURI(this[key]) : this[key]\n result[key] = val\n }\n return result\n }\n\n toArtifact(): Partial<IUpdateArtifact> {\n return {\n key: this.key,\n value: JSON.stringify(this.storageValues()),\n version: this.$artifact.version ?? 0,\n content_type: APP_JSON,\n } as Partial<IArtifact>\n }\n\n abstract namespace(): string\n}\n\n// TODO figure out the TypeScript magic for this to work\nexport type RowModelFactory<T extends IRowModel> = { new (values?: any): T }\n\n// export const RowModelCreator: RowModelFactory<IRowModel> = (values?: any) =>\n// new RowModel(values)\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhollyArtifact.js","names":["_sdkRtl","require","_sdk","_RowModel","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","_defineProperty","obj","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","res","call","TypeError","Number","compareDates","a","b","getTime","exports","TypedRows","constructor","rows","Maker","map","v","add","push","where","predicate","from","filter","select","selector","toArray","values","create","WhollyArtifact","sdk","table","keyColumn","length","loadRows","meta","typeRow","namespace","tableName","typeRows","checkHeader","createIndex","refresh","_this","ok","search_artifacts","concat","result","pos","forEach","r","row","rowPosition","toAT","rowHeader","header","join","tableHeader","LookerSDKError","nextRow","index","model","h","stringer","allValues","save","_arguments","_this2","force","$action","RowAction","Delete","delete_artifact","Update","update","None","checkId","_row","_this3","prepare","createUpdateBatch","_arguments2","_this4","_force","find","columnName","toString","displayHeader","_displayHeader","colName","displayable","delete","_arguments3","_this5","checkOutdated","deleteBatch","startsWith","source","_this6","errors","art","artifact","$artifact","version","fromObject","toObject","batchUpdate","_arguments4","_this7","updates","Create","deletes","getDelta","sort","creates","mergePurge","delta","u","d","splice","c","prepareBatch","e","message","items","_this8","arts","i","toArtifact","update_artifacts","updateRowsFromIndex","entries","_ref","_key","_this9","keys","k"],"sources":["../src/WhollyArtifact.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { IAPIMethods } from '@looker/sdk-rtl'\nimport { LookerSDKError } from '@looker/sdk-rtl'\nimport type { IArtifact, IUpdateArtifact } from '@looker/sdk'\nimport {\n artifact,\n delete_artifact,\n search_artifacts,\n update_artifacts,\n} from '@looker/sdk'\nimport type { ColumnHeaders, IRowModel, SheetValues } from './RowModel'\nimport { RowAction, rowPosition, stringer } from './RowModel'\n\n/**\n * Compare dates without running into numeric comparison problems\n * @param a first date to compare\n * @param b second date to compare\n * @returns 0 if dates are equal, positive if a > b, negative if a < b\n */\nexport const compareDates = (a: Date, b: Date) => a.getTime() - b.getTime()\n\nexport interface IMaker<T> {\n new (values?: any): T\n}\n\nexport interface IRowDelta<T extends IRowModel> {\n updates: T[]\n deletes: T[]\n creates: T[]\n}\n\n// TODO maybe get a technique from https://stackoverflow.com/a/34698946 or\n// https://www.logicbig.com/tutorials/misc/typescript/generic-constraints.html\n\n// TODO refactor WhollyArtifact<T> into something a bit cleaner\n// ref https://www.smashingmagazine.com/2020/10/understanding-typescript-generics/\nexport class TypedRows<T> {\n rows: T[] = []\n\n constructor(rows: T[], Maker?: IMaker<T>) {\n if (Maker) {\n this.rows = rows.map((v) => new Maker(v))\n } else {\n this.rows = rows\n }\n }\n\n public add(value: T): void {\n this.rows.push(value)\n }\n\n public where(predicate: (value: T) => boolean): TypedRows<T> {\n return TypedRows.from<T>(this.rows.filter(predicate))\n }\n\n public select<U>(selector: (value: T) => U): TypedRows<U> {\n return TypedRows.from<U>(this.rows.map(selector))\n }\n\n public toArray(): T[] {\n return this.rows\n }\n\n public static from<U>(values: U[]): TypedRows<U> {\n // Perhaps we perform some logic here.\n // ...\n\n return new TypedRows<U>(values)\n }\n\n public static create<U>(values?: U[]): TypedRows<U> {\n return new TypedRows<U>(values ?? [])\n }\n\n // Other collection functions.\n // ..\n}\n\nexport interface IWhollyArtifact<T extends IRowModel, P> {\n /** Any initialized Looker TypeScript SDK */\n sdk: IAPIMethods\n\n /** Namespace of this collection. Retrieved from IRowModel descendant */\n namespace: string\n\n /**\n * Name of this artifact \"table\". Used for table-level processing of the artifacts in a namespace.\n * Retrieved from IRowModel descendant\n */\n tableName: string\n\n /**\n /**\n * Header column names for reading from/writing to the sheet.\n * The order of the column names **must** match the order of the columns in the sheet.\n * The values used to read and write the sheet are always in column order position.\n */\n header: ColumnHeaders\n /** Column names to display */\n displayHeader: ColumnHeaders\n /** Name of the key column that represents the \"id\" */\n keyColumn: string\n /** All data in the sheet */\n rows: T[]\n /** Keyed row retrieval */\n index: Record<string, T>\n /** What's the next row of the sheet? */\n nextRow: number\n\n // TODO figure out init generic typing issue\n // init(values?: any): (values?: any) => T\n\n /**\n * Verify the column order in the sheet matches the key order of the row type\n * @param header array of column names in order\n */\n checkHeader(header: ColumnHeaders): boolean\n\n /**\n * True if the column name should be displayed in a UI\n *\n * False if it's an \"internal\" column name\n *\n * @param columnName to check for display\n */\n displayable(columnName: string): boolean\n\n /**\n * Gets the row's values in table.header column order\n * @param model row to introspect\n */\n values(model: T): SheetValues\n\n /**\n * Returns a 2D array of all row values based on the current rows collection.\n * The result include the header row\n */\n allValues(): SheetValues\n\n /**\n * Create a new row of this type\n * @param values either a value array or an object\n */\n typeRow<T extends IRowModel>(values?: any): T\n\n /**\n * Converts raw rows into typed rows.\n *\n * @param rows array of data to convert. Either value arrays or a collection of objects\n */\n typeRows<T extends IRowModel>(rows: SheetValues): T[]\n\n /**\n * Reload the entire tab by fetching all its values from the GSheet\n * @param values to use for refresh. If not provided, artifacts for the namespace will be searched\n */\n refresh<T extends IRowModel>(values?: any): Promise<T[]>\n\n /**\n * Save the specified row to the sheet.\n *\n * This routine determines whether to call update or create based on whether the row position is < 1\n *\n * @param model row to save\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n save<T extends IRowModel>(model: T, force?: boolean): Promise<T>\n\n /**\n * Create a row in the sheet\n *\n * If the row position is > 0 an error is thrown\n *\n * @param model row to create in sheet\n */\n create<T extends IRowModel>(model: T): Promise<T>\n\n /**\n * Update a row in the sheet\n *\n * If the row position is < 1 an error is thrown\n *\n * If the row is checkOutdated an error is thrown\n *\n * @param model row to create in sheet\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n update<T extends IRowModel>(model: T, force?: boolean): Promise<T>\n\n /**\n * Delete a row if it still exists\n * @param model to delete\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n delete<T extends IRowModel>(model: T, force?: boolean): Promise<boolean>\n\n /**\n * If the row is out of date, it throws a LookerSDKError\n * @param model row for status check\n * @param source row to compare against\n */\n checkOutdated<T extends IRowModel>(model: T, source?: T): Promise<boolean>\n\n /**\n * Find the matching row. If columnName is the primary key field, indexed retrieval is used\n *\n * @param value to find\n * @param columnName in which to find the value. Defaults to primary key. If primary key, indexed retrieval is use.\n */\n find(value: any, columnName?: string): T | undefined\n\n /**\n * Reassigns collection rows, checks header, and reindexes\n * @param rows to overwrite current list\n */\n loadRows<T extends IRowModel>(rows: SheetValues): T[]\n\n /** Converts the row collection to a plain javascript object array */\n toObject(): P[]\n\n /** Assigns the passed object[] to the rows collection */\n fromObject<T extends IRowModel>(obj: P[]): T[]\n\n /** Gets the delta rows for a batch update */\n getDelta<T extends IRowModel>(): IRowDelta<T>\n\n /**\n * Processes a delta change against the tab values snapshot\n * @param tab SheetValues to update (includes header row)\n * @param delta row changes to apply\n */\n mergePurge<T extends IRowModel>(\n tab: SheetValues,\n delta: IRowDelta<T>\n ): SheetValues\n\n /**\n * Prepare a batch for processing\n *\n * If `force` is false and update rows are outdated, a LookerSDKError with outdated list is thrown\n * @param tab of sheet values to use for update checks (includes header row)\n * @param delta change to merge and purge\n * @param force prepare each row but don't worry about outdated rows\n */\n prepareBatch<T extends IRowModel>(\n tab: SheetValues,\n delta: IRowDelta<T>,\n force?: boolean\n ): boolean\n\n /**\n * collect all rows to be updated or created and submit the request\n * and returns the updated collection\n *\n * @param items list of items to update or create\n */\n createUpdateBatch<T extends IRowModel>(items: T[]): Promise<T[]>\n\n /**\n * removes all rows marked for deletion and returns the updated collection\n *\n * @param items list of items to delete\n */\n deleteBatch<T extends IRowModel>(items: T[]): Promise<T[]>\n\n /**\n * Perform a batch update by retrieving the delta for the sheet, check for outdated update rows,\n * and update the entire tab sheet with the changes\n * @param force true to skip checking for outdated update rows\n */\n batchUpdate<T extends IRowModel>(force?: boolean): Promise<T[]>\n}\n\n/**\n * Keyed data for a tab, and the tab's header row\n * TODO delete this bad boy\n */\nexport interface ITabTable {\n /** Array of header names, in column order */\n header: ColumnHeaders\n /** Parsed data for the tab */\n rows: IRowModel[]\n}\n\n/** CRUDS operations for a GSheet tab */\nexport abstract class WhollyArtifact<T extends IRowModel, P>\n extends TypedRows<T>\n implements IWhollyArtifact<T, P>\n{\n index: Record<string, T> = {}\n namespace = ''\n tableName = ''\n\n constructor(\n public readonly sdk: IAPIMethods,\n public readonly table: ITabTable,\n public readonly keyColumn: string = '_id' // TODO change to `key`\n ) {\n super([])\n this.loadRows(table.rows)\n const meta = this.typeRow()\n this.namespace = meta.namespace()\n this.tableName = meta.tableName()\n }\n\n loadRows<T extends IRowModel>(rows: SheetValues): T[] {\n this.rows = this.typeRows(rows)\n this.checkHeader()\n this.createIndex()\n return this.rows as unknown as T[]\n }\n\n async refresh<T extends IRowModel>(values?: any): Promise<T[]> {\n if (!values) {\n values = await this.sdk.ok(\n search_artifacts(this.sdk, {\n namespace: this.namespace,\n key: `${this.tableName}:%`,\n })\n )\n }\n this.rows = this.typeRows(values)\n this.createIndex()\n return this.rows as unknown as T[]\n }\n\n abstract typeRow<T extends IRowModel>(values?: any): T\n\n typeRows<T extends IRowModel>(rows: SheetValues): T[] {\n const result: T[] = []\n let pos = 1\n\n rows.forEach((r) => {\n const row: T = this.typeRow(r)\n pos++\n // fixup row position?\n if (!row[rowPosition]) row[rowPosition] = pos\n result.push(row)\n })\n\n return result\n }\n\n // // TODO figure out init generic typing issue\n // init(values?: any): T {\n // const result: T = new this.NewItem(values)\n // return result\n // }\n\n /**\n * convert value to the strong type, or undefined if not value\n * @param value to strongly type\n * @private\n */\n private static toAT<T extends IRowModel>(value: unknown): T | undefined {\n if (value) return value as T\n return undefined\n }\n\n checkHeader() {\n // Nothing to check\n if (this.rows.length === 0) return true\n const row = this.rows[0]\n const rowHeader = row.header().join()\n const tableHeader = this.table.header.join()\n if (tableHeader !== rowHeader)\n throw new LookerSDKError(\n `Expected ${this.tableName} header to be ${rowHeader} not ${tableHeader}`\n )\n return true\n }\n\n get header() {\n return this.table.header\n }\n\n get nextRow() {\n // +1 for header row\n // +1 for 1-based rows\n return this.rows.length + 2\n }\n\n private createIndex() {\n this.index = {}\n this.rows.forEach((r) => {\n this.index[r[this.keyColumn]] = r\n })\n }\n\n values<T extends IRowModel>(model: T) {\n const result: SheetValues = []\n this.header.forEach((h) => {\n result.push(stringer(model[h]))\n })\n return result\n }\n\n allValues(): SheetValues {\n const values: SheetValues = [this.header]\n values.push(...this.rows.map((r) => this.values(r)))\n return values\n }\n\n async save<T extends IRowModel>(model: T, force = false): Promise<T> {\n switch (model.$action) {\n case RowAction.Delete: {\n await this.sdk.ok(\n delete_artifact(this.sdk, this.namespace, model[this.keyColumn])\n )\n return model\n }\n case RowAction.Update: {\n return await this.update<T>(model, force)\n }\n case RowAction.None: {\n return model\n }\n }\n return (await this.create<T>(model)) as unknown as T\n }\n\n checkId<T extends IRowModel>(model: T) {\n if (!model[this.keyColumn])\n throw new LookerSDKError(\n `\"${this.keyColumn}\" must be assigned for ${this.tableName} row ${model._row}`\n )\n }\n\n async create<T extends IRowModel>(model: T): Promise<T> {\n if (model._row > 0)\n throw new LookerSDKError(\n `create needs ${this.tableName} \"${\n model[this.keyColumn]\n }\" row to be < 1, not ${model._row}`\n )\n model.prepare()\n this.checkId(model)\n await this.createUpdateBatch([model])\n return this.index[model[this.keyColumn]] as unknown as T\n }\n\n async update<T extends IRowModel>(model: T, _force = false): Promise<T> {\n if (!model._row)\n throw new LookerSDKError(\n `${this.tableName} \"${model[this.keyColumn]}\" row must be > 0 to update`\n )\n\n model.prepare()\n this.checkId(model)\n await this.createUpdateBatch([model])\n return this.index[model[this.keyColumn]] as unknown as T\n }\n\n find(value: any, columnName?: string): T | undefined {\n if (!value) return undefined\n let key = columnName || this.keyColumn\n if (typeof value === 'number') {\n // Default key to row\n if (!columnName) key = '_row'\n }\n if (columnName === this.keyColumn) {\n // Find by index\n return WhollyArtifact.toAT(this.index[value.toString()])\n }\n return WhollyArtifact.toAT(this.rows.find((r) => r[key] === value))\n }\n\n private _displayHeader: ColumnHeaders = []\n get displayHeader(): ColumnHeaders {\n if (this._displayHeader.length === 0) {\n this._displayHeader = this.header.filter((colName) =>\n this.displayable(colName)\n )\n }\n return this._displayHeader\n }\n\n async delete<T extends IRowModel>(model: T, force = false) {\n if (!force) await this.checkOutdated(model)\n await this.deleteBatch([model])\n return true\n }\n\n displayable(columnName: string): boolean {\n return !(columnName.startsWith('_') || columnName.startsWith('$'))\n }\n\n async checkOutdated<T extends IRowModel>(model: T, source?: T) {\n if (model[rowPosition] < 1) return false\n const errors: string[] = []\n if (!source) {\n const art = await this.sdk.ok(\n artifact(this.sdk, {\n namespace: this.namespace,\n key: model[this.keyColumn],\n })\n )\n // artifact returns an array, so get the one row this should be\n if (art.length === 1) source = this.typeRow(art[0]) as unknown as T\n }\n if (!source) {\n errors.push(`Row not found`)\n } else {\n if (source.$artifact.version !== model.$artifact.version) {\n errors.push(\n `version ${source.$artifact.version} != ${model.$artifact.version}`\n )\n }\n }\n if (errors.length > 0)\n throw new LookerSDKError(\n `${this.tableName} row ${\n model[this.keyColumn]\n } is outdated: ${errors.join()}`\n )\n return false\n }\n\n fromObject<T extends IRowModel>(obj: P[]): T[] {\n this.loadRows(obj)\n return this.rows as unknown as T[]\n }\n\n toObject(): P[] {\n return this.rows.map((r) => r.toObject() as unknown as P)\n }\n\n async batchUpdate<T extends IRowModel>(_force = false): Promise<T[]> {\n // Updates and creates are processed in the same call\n const updates = this.rows.filter(\n (r) => r.$action === RowAction.Update || r.$action === RowAction.Create\n )\n const deletes = this.rows.filter((r) => r.$action === RowAction.Delete)\n\n await this.createUpdateBatch(updates)\n await this.deleteBatch(deletes)\n return this.rows as unknown as T[]\n }\n\n getDelta<T extends IRowModel>(): IRowDelta<T> {\n const updates = this.rows.filter((r) => r.$action === RowAction.Update)\n // Sort deletions in descending row order\n const deletes = this.rows\n .filter((r) => r.$action === RowAction.Delete)\n .sort((a, b) => b._row - a._row)\n const creates = this.rows.filter((r) => r.$action === RowAction.Create)\n\n return {\n updates: updates as unknown as T[],\n deletes: deletes as unknown as T[],\n creates: creates as unknown as T[],\n }\n }\n\n mergePurge<T extends IRowModel>(\n values: SheetValues,\n delta: IRowDelta<T>\n ): SheetValues {\n delta.updates.forEach((u) => (values[u._row - 1] = this.values(u)))\n delta.deletes.forEach((d) => values.splice(d._row - 1, 1))\n delta.creates.forEach((c) => values.push(this.values(c)))\n return values\n }\n\n prepareBatch<T extends IRowModel>(\n values: SheetValues,\n delta: IRowDelta<T>,\n force?: boolean\n ): boolean {\n if (!force) {\n const errors = []\n try {\n delta.updates.forEach((u) =>\n this.checkOutdated(u, this.typeRow(values[u._row - 1]))\n )\n delta.deletes.forEach((d) =>\n this.checkOutdated(d, this.typeRow(values[d._row - 1]))\n )\n } catch (e: any) {\n errors.push(e.message)\n }\n if (errors.length > 0) throw new LookerSDKError(errors.join('\\n'))\n }\n delta.updates.forEach((u) => u.prepare())\n delta.creates.forEach((c) => c.prepare())\n return true\n }\n\n async createUpdateBatch<T extends IRowModel>(items: T[]): Promise<T[]> {\n if (items.length < 1) return Promise.resolve(this.rows as unknown as T[])\n const namespace = items[0].namespace()\n const arts: Partial<IArtifact>[] = items.map((i) => i.toArtifact())\n /** This will throw an error if the request fails */\n const result = await this.sdk.ok(\n update_artifacts(this.sdk, namespace, arts as IUpdateArtifact[])\n )\n result.forEach((r) => {\n const row: T = this.typeRow(r)\n const key = row[this.keyColumn]\n this.index[key] = row as any // TODO why is this the only thing that works?\n })\n this.updateRowsFromIndex()\n return Promise.resolve(this.rows as unknown as T[])\n }\n\n /**\n * Repopulates the row collection based exclusively on the values in the index\n * @private\n */\n private updateRowsFromIndex<T extends IRowModel>(): T[] {\n const result: any[] = []\n Object.entries(this.index).forEach(([_key, row], index) => {\n row[rowPosition] = index + 1\n result.push(row)\n })\n this.rows = result as any[] // TODO why is this the only thing that works?\n return this.rows as unknown as T[]\n }\n\n async deleteBatch<T extends IRowModel>(items: T[]): Promise<T[]> {\n if (items.length < 1) return Promise.resolve(this.rows as unknown as T[])\n const namespace = items[0].namespace()\n const keys = items.map((r) => r[this.keyColumn])\n await this.sdk.ok(delete_artifact(this.sdk, namespace, keys.join()))\n // Remove deleted items from the collections\n keys.forEach((k) => delete this.index[k])\n this.updateRowsFromIndex()\n return Promise.resolve(this.rows as unknown as T[])\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WhollyArtifact.js","names":["_sdkRtl","require","_sdk","_RowModel","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","_defineProperty","obj","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","res","call","TypeError","Number","compareDates","a","b","getTime","exports","TypedRows","constructor","rows","Maker","map","v","add","push","where","predicate","from","filter","select","selector","toArray","values","create","WhollyArtifact","sdk","table","keyColumn","length","loadRows","meta","typeRow","namespace","tableName","typeRows","checkHeader","createIndex","refresh","_this","ok","search_artifacts","concat","result","pos","forEach","r","row","rowPosition","toAT","rowHeader","header","join","tableHeader","LookerSDKError","nextRow","index","model","h","stringer","allValues","save","_arguments","_this2","force","$action","RowAction","Delete","delete_artifact","Update","update","None","checkId","_row","_this3","prepare","createUpdateBatch","_arguments2","_this4","_force","find","columnName","toString","displayHeader","_displayHeader","colName","displayable","delete","_arguments3","_this5","checkOutdated","deleteBatch","startsWith","source","_this6","errors","art","artifact","$artifact","version","fromObject","toObject","batchUpdate","_arguments4","_this7","updates","Create","deletes","getDelta","sort","creates","mergePurge","delta","u","d","splice","c","prepareBatch","e","message","items","_this8","arts","i","toArtifact","update_artifacts","updateRowsFromIndex","entries","_ref","_key","_this9","keys","k"],"sources":["../src/WhollyArtifact.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { IAPIMethods } from '@looker/sdk-rtl'\nimport { LookerSDKError } from '@looker/sdk-rtl'\nimport type { IArtifact, IUpdateArtifact } from '@looker/sdk'\nimport {\n artifact,\n delete_artifact,\n search_artifacts,\n update_artifacts,\n} from '@looker/sdk'\nimport type { ColumnHeaders, IRowModel, SheetValues } from './RowModel'\nimport { RowAction, rowPosition, stringer } from './RowModel'\n\n/**\n * Compare dates without running into numeric comparison problems\n * @param a first date to compare\n * @param b second date to compare\n * @returns 0 if dates are equal, positive if a > b, negative if a < b\n */\nexport const compareDates = (a: Date, b: Date) => a.getTime() - b.getTime()\n\nexport interface IMaker<T> {\n new (values?: any): T\n}\n\nexport interface IRowDelta<T extends IRowModel> {\n updates: T[]\n deletes: T[]\n creates: T[]\n}\n\n// TODO maybe get a technique from https://stackoverflow.com/a/34698946 or\n// https://www.logicbig.com/tutorials/misc/typescript/generic-constraints.html\n\n// TODO refactor WhollyArtifact<T> into something a bit cleaner\n// ref https://www.smashingmagazine.com/2020/10/understanding-typescript-generics/\nexport class TypedRows<T> {\n rows: T[] = []\n\n constructor(rows: T[], Maker?: IMaker<T>) {\n if (Maker) {\n this.rows = rows.map((v) => new Maker(v))\n } else {\n this.rows = rows\n }\n }\n\n public add(value: T): void {\n this.rows.push(value)\n }\n\n public where(predicate: (value: T) => boolean): TypedRows<T> {\n return TypedRows.from<T>(this.rows.filter(predicate))\n }\n\n public select<U>(selector: (value: T) => U): TypedRows<U> {\n return TypedRows.from<U>(this.rows.map(selector))\n }\n\n public toArray(): T[] {\n return this.rows\n }\n\n public static from<U>(values: U[]): TypedRows<U> {\n // Perhaps we perform some logic here.\n // ...\n\n return new TypedRows<U>(values)\n }\n\n public static create<U>(values?: U[]): TypedRows<U> {\n return new TypedRows<U>(values ?? [])\n }\n\n // Other collection functions.\n // ..\n}\n\nexport interface IWhollyArtifact<T extends IRowModel, P> {\n /** Any initialized Looker TypeScript SDK */\n sdk: IAPIMethods\n\n /** Namespace of this collection. Retrieved from IRowModel descendant */\n namespace: string\n\n /**\n * Name of this artifact \"table\". Used for table-level processing of the artifacts in a namespace.\n * Retrieved from IRowModel descendant\n */\n tableName: string\n\n /**\n /**\n * Header column names for reading from/writing to the sheet.\n * The order of the column names **must** match the order of the columns in the sheet.\n * The values used to read and write the sheet are always in column order position.\n */\n header: ColumnHeaders\n /** Column names to display */\n displayHeader: ColumnHeaders\n /** Name of the key column that represents the \"id\" */\n keyColumn: string\n /** All data in the sheet */\n rows: T[]\n /** Keyed row retrieval */\n index: Record<string, T>\n /** What's the next row of the sheet? */\n nextRow: number\n\n // TODO figure out init generic typing issue\n // init(values?: any): (values?: any) => T\n\n /**\n * Verify the column order in the sheet matches the key order of the row type\n * @param header array of column names in order\n */\n checkHeader(header: ColumnHeaders): boolean\n\n /**\n * True if the column name should be displayed in a UI\n *\n * False if it's an \"internal\" column name\n *\n * @param columnName to check for display\n */\n displayable(columnName: string): boolean\n\n /**\n * Gets the row's values in table.header column order\n * @param model row to introspect\n */\n values(model: T): SheetValues\n\n /**\n * Returns a 2D array of all row values based on the current rows collection.\n * The result include the header row\n */\n allValues(): SheetValues\n\n /**\n * Create a new row of this type\n * @param values either a value array or an object\n */\n typeRow<T extends IRowModel>(values?: any): T\n\n /**\n * Converts raw rows into typed rows.\n *\n * @param rows array of data to convert. Either value arrays or a collection of objects\n */\n typeRows<T extends IRowModel>(rows: SheetValues): T[]\n\n /**\n * Reload the entire tab by fetching all its values from the GSheet\n * @param values to use for refresh. If not provided, artifacts for the namespace will be searched\n */\n refresh<T extends IRowModel>(values?: any): Promise<T[]>\n\n /**\n * Save the specified row to the sheet.\n *\n * This routine determines whether to call update or create based on whether the row position is < 1\n *\n * @param model row to save\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n save<T extends IRowModel>(model: T, force?: boolean): Promise<T>\n\n /**\n * Create a row in the sheet\n *\n * If the row position is > 0 an error is thrown\n *\n * @param model row to create in sheet\n */\n create<T extends IRowModel>(model: T): Promise<T>\n\n /**\n * Update a row in the sheet\n *\n * If the row position is < 1 an error is thrown\n *\n * If the row is checkOutdated an error is thrown\n *\n * @param model row to create in sheet\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n update<T extends IRowModel>(model: T, force?: boolean): Promise<T>\n\n /**\n * Delete a row if it still exists\n * @param model to delete\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n delete<T extends IRowModel>(model: T, force?: boolean): Promise<boolean>\n\n /**\n * If the row is out of date, it throws a LookerSDKError\n * @param model row for status check\n * @param source row to compare against\n */\n checkOutdated<T extends IRowModel>(model: T, source?: T): Promise<boolean>\n\n /**\n * Find the matching row. If columnName is the primary key field, indexed retrieval is used\n *\n * @param value to find\n * @param columnName in which to find the value. Defaults to primary key. If primary key, indexed retrieval is use.\n */\n find(value: any, columnName?: string): T | undefined\n\n /**\n * Reassigns collection rows, checks header, and reindexes\n * @param rows to overwrite current list\n */\n loadRows<T extends IRowModel>(rows: SheetValues): T[]\n\n /** Converts the row collection to a plain javascript object array */\n toObject(): P[]\n\n /** Assigns the passed object[] to the rows collection */\n fromObject<T extends IRowModel>(obj: P[]): T[]\n\n /** Gets the delta rows for a batch update */\n getDelta<T extends IRowModel>(): IRowDelta<T>\n\n /**\n * Processes a delta change against the tab values snapshot\n * @param tab SheetValues to update (includes header row)\n * @param delta row changes to apply\n */\n mergePurge<T extends IRowModel>(\n tab: SheetValues,\n delta: IRowDelta<T>\n ): SheetValues\n\n /**\n * Prepare a batch for processing\n *\n * If `force` is false and update rows are outdated, a LookerSDKError with outdated list is thrown\n * @param tab of sheet values to use for update checks (includes header row)\n * @param delta change to merge and purge\n * @param force prepare each row but don't worry about outdated rows\n */\n prepareBatch<T extends IRowModel>(\n tab: SheetValues,\n delta: IRowDelta<T>,\n force?: boolean\n ): boolean\n\n /**\n * collect all rows to be updated or created and submit the request\n * and returns the updated collection\n *\n * @param items list of items to update or create\n */\n createUpdateBatch<T extends IRowModel>(items: T[]): Promise<T[]>\n\n /**\n * removes all rows marked for deletion and returns the updated collection\n *\n * @param items list of items to delete\n */\n deleteBatch<T extends IRowModel>(items: T[]): Promise<T[]>\n\n /**\n * Perform a batch update by retrieving the delta for the sheet, check for outdated update rows,\n * and update the entire tab sheet with the changes\n * @param force true to skip checking for outdated update rows\n */\n batchUpdate<T extends IRowModel>(force?: boolean): Promise<T[]>\n}\n\n/**\n * Keyed data for a tab, and the tab's header row\n * TODO delete this bad boy\n */\nexport interface ITabTable {\n /** Array of header names, in column order */\n header: ColumnHeaders\n /** Parsed data for the tab */\n rows: IRowModel[]\n}\n\n/** CRUDS operations for a GSheet tab */\nexport abstract class WhollyArtifact<T extends IRowModel, P>\n extends TypedRows<T>\n implements IWhollyArtifact<T, P>\n{\n index: Record<string, T> = {}\n namespace = ''\n tableName = ''\n\n constructor(\n public readonly sdk: IAPIMethods,\n public readonly table: ITabTable,\n public readonly keyColumn: string = '_id' // TODO change to `key`\n ) {\n super([])\n this.loadRows(table.rows)\n const meta = this.typeRow()\n this.namespace = meta.namespace()\n this.tableName = meta.tableName()\n }\n\n loadRows<T extends IRowModel>(rows: SheetValues): T[] {\n this.rows = this.typeRows(rows)\n this.checkHeader()\n this.createIndex()\n return this.rows as unknown as T[]\n }\n\n async refresh<T extends IRowModel>(values?: any): Promise<T[]> {\n if (!values) {\n values = await this.sdk.ok(\n search_artifacts(this.sdk, {\n namespace: this.namespace,\n key: `${this.tableName}:%`,\n })\n )\n }\n this.rows = this.typeRows(values)\n this.createIndex()\n return this.rows as unknown as T[]\n }\n\n abstract typeRow<T extends IRowModel>(values?: any): T\n\n typeRows<T extends IRowModel>(rows: SheetValues): T[] {\n const result: T[] = []\n let pos = 1\n\n rows.forEach((r) => {\n const row: T = this.typeRow(r)\n pos++\n // fixup row position?\n if (!row[rowPosition]) row[rowPosition] = pos\n result.push(row)\n })\n\n return result\n }\n\n // // TODO figure out init generic typing issue\n // init(values?: any): T {\n // const result: T = new this.NewItem(values)\n // return result\n // }\n\n /**\n * convert value to the strong type, or undefined if not value\n * @param value to strongly type\n * @private\n */\n private static toAT<T extends IRowModel>(value: unknown): T | undefined {\n if (value) return value as T\n return undefined\n }\n\n checkHeader() {\n // Nothing to check\n if (this.rows.length === 0) return true\n const row = this.rows[0]\n const rowHeader = row.header().join()\n const tableHeader = this.table.header.join()\n if (tableHeader !== rowHeader)\n throw new LookerSDKError(\n `Expected ${this.tableName} header to be ${rowHeader} not ${tableHeader}`\n )\n return true\n }\n\n get header() {\n return this.table.header\n }\n\n get nextRow() {\n // +1 for header row\n // +1 for 1-based rows\n return this.rows.length + 2\n }\n\n private createIndex() {\n this.index = {}\n this.rows.forEach((r) => {\n this.index[r[this.keyColumn]] = r\n })\n }\n\n values<T extends IRowModel>(model: T) {\n const result: SheetValues = []\n this.header.forEach((h) => {\n result.push(stringer(model[h]))\n })\n return result\n }\n\n allValues(): SheetValues {\n const values: SheetValues = [this.header]\n values.push(...this.rows.map((r) => this.values(r)))\n return values\n }\n\n async save<T extends IRowModel>(model: T, force = false): Promise<T> {\n switch (model.$action) {\n case RowAction.Delete: {\n await this.sdk.ok(\n delete_artifact(this.sdk, this.namespace, model[this.keyColumn])\n )\n return model\n }\n case RowAction.Update: {\n return await this.update<T>(model, force)\n }\n case RowAction.None: {\n return model\n }\n }\n return (await this.create<T>(model)) as unknown as T\n }\n\n checkId<T extends IRowModel>(model: T) {\n if (!model[this.keyColumn])\n throw new LookerSDKError(\n `\"${this.keyColumn}\" must be assigned for ${this.tableName} row ${model._row}`\n )\n }\n\n async create<T extends IRowModel>(model: T): Promise<T> {\n if (model._row > 0)\n throw new LookerSDKError(\n `create needs ${this.tableName} \"${\n model[this.keyColumn]\n }\" row to be < 1, not ${model._row}`\n )\n model.prepare()\n this.checkId(model)\n await this.createUpdateBatch([model])\n return this.index[model[this.keyColumn]] as unknown as T\n }\n\n async update<T extends IRowModel>(model: T, _force = false): Promise<T> {\n if (!model._row)\n throw new LookerSDKError(\n `${this.tableName} \"${model[this.keyColumn]}\" row must be > 0 to update`\n )\n\n model.prepare()\n this.checkId(model)\n await this.createUpdateBatch([model])\n return this.index[model[this.keyColumn]] as unknown as T\n }\n\n find(value: any, columnName?: string): T | undefined {\n if (!value) return undefined\n let key = columnName || this.keyColumn\n if (typeof value === 'number') {\n // Default key to row\n if (!columnName) key = '_row'\n }\n if (columnName === this.keyColumn) {\n // Find by index\n return WhollyArtifact.toAT(this.index[value.toString()])\n }\n return WhollyArtifact.toAT(this.rows.find((r) => r[key] === value))\n }\n\n private _displayHeader: ColumnHeaders = []\n get displayHeader(): ColumnHeaders {\n if (this._displayHeader.length === 0) {\n this._displayHeader = this.header.filter((colName) =>\n this.displayable(colName)\n )\n }\n return this._displayHeader\n }\n\n async delete<T extends IRowModel>(model: T, force = false) {\n if (!force) await this.checkOutdated(model)\n await this.deleteBatch([model])\n return true\n }\n\n displayable(columnName: string): boolean {\n return !(columnName.startsWith('_') || columnName.startsWith('$'))\n }\n\n async checkOutdated<T extends IRowModel>(model: T, source?: T) {\n if (model[rowPosition] < 1) return false\n const errors: string[] = []\n if (!source) {\n const art = await this.sdk.ok(\n artifact(this.sdk, {\n namespace: this.namespace,\n key: model[this.keyColumn],\n })\n )\n // artifact returns an array, so get the one row this should be\n if (art.length === 1) source = this.typeRow(art[0]) as unknown as T\n }\n if (!source) {\n errors.push(`Row not found`)\n } else {\n if (source.$artifact.version !== model.$artifact.version) {\n errors.push(\n `version ${source.$artifact.version} != ${model.$artifact.version}`\n )\n }\n }\n if (errors.length > 0)\n throw new LookerSDKError(\n `${this.tableName} row ${\n model[this.keyColumn]\n } is outdated: ${errors.join()}`\n )\n return false\n }\n\n fromObject<T extends IRowModel>(obj: P[]): T[] {\n this.loadRows(obj)\n return this.rows as unknown as T[]\n }\n\n toObject(): P[] {\n return this.rows.map((r) => r.toObject() as unknown as P)\n }\n\n async batchUpdate<T extends IRowModel>(_force = false): Promise<T[]> {\n // Updates and creates are processed in the same call\n const updates = this.rows.filter(\n (r) => r.$action === RowAction.Update || r.$action === RowAction.Create\n )\n const deletes = this.rows.filter((r) => r.$action === RowAction.Delete)\n\n await this.createUpdateBatch(updates)\n await this.deleteBatch(deletes)\n return this.rows as unknown as T[]\n }\n\n getDelta<T extends IRowModel>(): IRowDelta<T> {\n const updates = this.rows.filter((r) => r.$action === RowAction.Update)\n // Sort deletions in descending row order\n const deletes = this.rows\n .filter((r) => r.$action === RowAction.Delete)\n .sort((a, b) => b._row - a._row)\n const creates = this.rows.filter((r) => r.$action === RowAction.Create)\n\n return {\n updates: updates as unknown as T[],\n deletes: deletes as unknown as T[],\n creates: creates as unknown as T[],\n }\n }\n\n mergePurge<T extends IRowModel>(\n values: SheetValues,\n delta: IRowDelta<T>\n ): SheetValues {\n delta.updates.forEach((u) => (values[u._row - 1] = this.values(u)))\n delta.deletes.forEach((d) => values.splice(d._row - 1, 1))\n delta.creates.forEach((c) => values.push(this.values(c)))\n return values\n }\n\n prepareBatch<T extends IRowModel>(\n values: SheetValues,\n delta: IRowDelta<T>,\n force?: boolean\n ): boolean {\n if (!force) {\n const errors = []\n try {\n delta.updates.forEach((u) =>\n this.checkOutdated(u, this.typeRow(values[u._row - 1]))\n )\n delta.deletes.forEach((d) =>\n this.checkOutdated(d, this.typeRow(values[d._row - 1]))\n )\n } catch (e: any) {\n errors.push(e.message)\n }\n if (errors.length > 0) throw new LookerSDKError(errors.join('\\n'))\n }\n delta.updates.forEach((u) => u.prepare())\n delta.creates.forEach((c) => c.prepare())\n return true\n }\n\n async createUpdateBatch<T extends IRowModel>(items: T[]): Promise<T[]> {\n if (items.length < 1) return Promise.resolve(this.rows as unknown as T[])\n const namespace = items[0].namespace()\n const arts: Partial<IArtifact>[] = items.map((i) => i.toArtifact())\n /** This will throw an error if the request fails */\n const result = await this.sdk.ok(\n update_artifacts(this.sdk, namespace, arts as IUpdateArtifact[])\n )\n result.forEach((r) => {\n const row: T = this.typeRow(r)\n const key = row[this.keyColumn]\n this.index[key] = row as any // TODO why is this the only thing that works?\n })\n this.updateRowsFromIndex()\n return Promise.resolve(this.rows as unknown as T[])\n }\n\n /**\n * Repopulates the row collection based exclusively on the values in the index\n * @private\n */\n private updateRowsFromIndex<T extends IRowModel>(): T[] {\n const result: any[] = []\n Object.entries(this.index).forEach(([_key, row], index) => {\n row[rowPosition] = index + 1\n result.push(row)\n })\n this.rows = result as any[] // TODO why is this the only thing that works?\n return this.rows as unknown as T[]\n }\n\n async deleteBatch<T extends IRowModel>(items: T[]): Promise<T[]> {\n if (items.length < 1) return Promise.resolve(this.rows as unknown as T[])\n const namespace = items[0].namespace()\n const keys = items.map((r) => r[this.keyColumn])\n await this.sdk.ok(delete_artifact(this.sdk, namespace, keys.join()))\n // Remove deleted items from the collections\n keys.forEach((k) => delete this.index[k])\n this.updateRowsFromIndex()\n return Promise.resolve(this.rows as unknown as T[])\n }\n}\n"],"mappings":"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"}
|
package/lib/esm/RowModel.js
CHANGED
|
@@ -1,29 +1,18 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.stringer = exports.rowPosition = exports.noDate = exports.nilCell = exports.addMinutes = exports.RowModel = exports.RowAction = exports.APP_JSON = void 0;
|
|
7
|
-
var _uuid = require("uuid");
|
|
8
|
-
var _sdkRtl = require("@looker/sdk-rtl");
|
|
9
|
-
var _omit = _interopRequireDefault(require("lodash/omit"));
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
1
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
12
2
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
13
3
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
14
4
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
15
5
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
var addMinutes = (date, minutes) => {
|
|
6
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
7
|
+
import { boolDefault, LookerSDKError } from '@looker/sdk-rtl';
|
|
8
|
+
import omit from 'lodash/omit';
|
|
9
|
+
export var noDate = new Date(-8640000000000000);
|
|
10
|
+
export var APP_JSON = 'application/json';
|
|
11
|
+
export var nilCell = '\0';
|
|
12
|
+
export var addMinutes = (date, minutes) => {
|
|
23
13
|
return new Date(date.getTime() + minutes * 60000);
|
|
24
14
|
};
|
|
25
|
-
|
|
26
|
-
var stringer = value => {
|
|
15
|
+
export var stringer = value => {
|
|
27
16
|
if (value === undefined || value === null) return nilCell;
|
|
28
17
|
if (value instanceof Date) {
|
|
29
18
|
if (value === noDate) return nilCell;
|
|
@@ -31,18 +20,15 @@ var stringer = value => {
|
|
|
31
20
|
}
|
|
32
21
|
return value.toString();
|
|
33
22
|
};
|
|
34
|
-
|
|
35
|
-
var
|
|
36
|
-
exports.rowPosition = rowPosition;
|
|
37
|
-
var RowAction = function (RowAction) {
|
|
23
|
+
export var rowPosition = '_row';
|
|
24
|
+
export var RowAction = function (RowAction) {
|
|
38
25
|
RowAction[RowAction["None"] = 0] = "None";
|
|
39
26
|
RowAction[RowAction["Create"] = 1] = "Create";
|
|
40
27
|
RowAction[RowAction["Update"] = 2] = "Update";
|
|
41
28
|
RowAction[RowAction["Delete"] = 3] = "Delete";
|
|
42
29
|
return RowAction;
|
|
43
30
|
}({});
|
|
44
|
-
|
|
45
|
-
class RowModel {
|
|
31
|
+
export class RowModel {
|
|
46
32
|
constructor(values) {
|
|
47
33
|
_defineProperty(this, "_row", 0);
|
|
48
34
|
_defineProperty(this, "_id", '');
|
|
@@ -94,9 +80,9 @@ class RowModel {
|
|
|
94
80
|
if (((_values$$artifact = values.$artifact) === null || _values$$artifact === void 0 ? void 0 : (_values$$artifact$con = _values$$artifact.content_type) === null || _values$$artifact$con === void 0 ? void 0 : _values$$artifact$con.localeCompare(APP_JSON, 'en', {
|
|
95
81
|
sensitivity: 'base'
|
|
96
82
|
})) === 0) {
|
|
97
|
-
throw new
|
|
83
|
+
throw new LookerSDKError("Expected ".concat(APP_JSON, " but got ").concat(e));
|
|
98
84
|
} else {
|
|
99
|
-
throw new
|
|
85
|
+
throw new LookerSDKError(e);
|
|
100
86
|
}
|
|
101
87
|
}
|
|
102
88
|
}
|
|
@@ -115,7 +101,7 @@ class RowModel {
|
|
|
115
101
|
return this.constructor.name;
|
|
116
102
|
}
|
|
117
103
|
makey() {
|
|
118
|
-
return "".concat(this.tableName(), ":").concat((
|
|
104
|
+
return "".concat(this.tableName(), ":").concat(uuidv4());
|
|
119
105
|
}
|
|
120
106
|
get key() {
|
|
121
107
|
return this._id;
|
|
@@ -125,7 +111,7 @@ class RowModel {
|
|
|
125
111
|
this.$artifact.key = value;
|
|
126
112
|
}
|
|
127
113
|
oops(message) {
|
|
128
|
-
throw new
|
|
114
|
+
throw new LookerSDKError("".concat(this.key, ": ").concat(message));
|
|
129
115
|
}
|
|
130
116
|
get $action() {
|
|
131
117
|
if (this.$_action === RowAction.None && this.isNew()) return RowAction.Create;
|
|
@@ -220,7 +206,7 @@ class RowModel {
|
|
|
220
206
|
return parseFloat(value);
|
|
221
207
|
}
|
|
222
208
|
if (type === 'boolean') {
|
|
223
|
-
return
|
|
209
|
+
return boolDefault(value, false);
|
|
224
210
|
}
|
|
225
211
|
if (this[key] instanceof Date) {
|
|
226
212
|
if (value) return new Date(value);
|
|
@@ -242,7 +228,7 @@ class RowModel {
|
|
|
242
228
|
return undefined;
|
|
243
229
|
}
|
|
244
230
|
toObject() {
|
|
245
|
-
return (
|
|
231
|
+
return omit(_objectSpread({}, this), ['$_action']);
|
|
246
232
|
}
|
|
247
233
|
fromObject(obj) {
|
|
248
234
|
return this.assign(obj);
|
|
@@ -269,6 +255,5 @@ class RowModel {
|
|
|
269
255
|
};
|
|
270
256
|
}
|
|
271
257
|
}
|
|
272
|
-
exports.RowModel = RowModel;
|
|
273
258
|
_defineProperty(RowModel, "hide", new Set(['_row']));
|
|
274
259
|
//# sourceMappingURL=RowModel.js.map
|
package/lib/esm/RowModel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowModel.js","names":["_uuid","require","_sdkRtl","_omit","_interopRequireDefault","obj","__esModule","default","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","noDate","Date","exports","APP_JSON","nilCell","addMinutes","date","minutes","getTime","stringer","toISOString","toString","rowPosition","RowAction","RowModel","constructor","values","version","None","initValues","makey","$_action","Create","isNew","$artifact","isStored","initFromArray","Array","isArray","header","val","index","typeCast","nested","JSON","parse","e","_values$$artifact","_values$$artifact$con","content_type","localeCompare","sensitivity","LookerSDKError","concat","k","decodeURI","tableName","name","uuidv4","_id","oops","message","$action","Delete","Update","setCreate","setUpdate","setDelete","result","v","startsWith","hide","has","displayHeader","prepare","_updated","type","fromType","isInt","match","parseInt","parseFloat","boolDefault","split","assign","validate","toObject","omit","fromObject","fromArtifact","storageValues","encodeURI","toArtifact","_this$$artifact$versi","stringify","Set"],"sources":["../../src/RowModel.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport { v4 as uuidv4 } from 'uuid'\nimport { boolDefault, LookerSDKError } from '@looker/sdk-rtl'\nimport omit from 'lodash/omit'\nimport type { IArtifact, IUpdateArtifact } from '@looker/sdk'\nexport type SheetValues = any[]\n\nexport const noDate = new Date(-8640000000000000)\nexport const APP_JSON = 'application/json'\n\n/** Signifies an empty cell */\nexport const nilCell = '\\0'\n\nexport const addMinutes = (date: Date, minutes: number) => {\n return new Date(date.getTime() + minutes * 60000)\n}\n\n/** Convert a value to the string representation for a cell value */\nexport const stringer = (value: any) => {\n if (value === undefined || value === null) return nilCell\n if (value instanceof Date) {\n if (value === noDate) return nilCell\n return value.toISOString()\n }\n return value.toString()\n}\n\n/** Key/value pairs for tab data */\nexport type RowValues = Record<string, any>\n\n/** Sheet (tab) column header definition */\nexport type ColumnHeaders = string[]\n\n/** name of the property that tracks the row's position in the tab sheet */\nexport const rowPosition = '_row'\n\nexport interface IRowValidationError {\n message: string\n type: 'error'\n}\n\nexport type RowValidationErrors = Record<string, IRowValidationError>\n\nexport enum RowAction {\n None,\n Create,\n Update,\n Delete,\n}\n\n/**\n * Includes type-specific properties and base Looker Artifact properties where the JSON\n * data in the artifact value property will be extracted into the type-specific\n * properties of the row model\n */\nexport interface IRowModelProps extends RowValues {\n /** Row position in sheet for this item. Usually assigned in WhollySheet processing */\n _row: number\n /**\n * Unique ID for this row. This is an alias for the artifact's key.\n * It's assigned to a combination type name:UUID in prepare()\n *\n * TODO remove this property entirely after changing the `_id` refs in the Hackathon app to use `key`\n */\n _id: string\n /**\n * Updated date/time stamp for this row. Always set in prepare().\n * TODO remove this property entirely because the artifact `version` property performs the version locking\n */\n _updated: Date\n\n /** Batch update action. Defaults to RowAction.None, so the row is not part of the delta */\n $action: RowAction\n /** Looker API key/value store artifact object for managing this row */\n $artifact: Partial<IArtifact>\n}\n\n/** Keyed data for a sheet row */\nexport interface IRowModel extends IRowModelProps {\n /**\n * Assign a value array or object to the typed row\n *\n * @param values an array of values, or an object with matching keys\n */\n assign(values: any): IRowModel\n\n /** All keys for this object, but overrideable */\n keys(): ColumnHeaders\n\n /** The sheet Column Headers keys for this model */\n header(): ColumnHeaders\n\n /** The display column headers for this model */\n displayHeader(): ColumnHeaders\n\n /** Column values in the correct order to write the entire row to the GSheet */\n values(): SheetValues\n\n /**\n * Prepare the row for saving. This includes auto-generation of _id and updating _update\n * Override this for error handling, calculations, and other default initializations\n * to avoid persisting bad data values to the sheet\n */\n prepare(): IRowModel\n\n /** Returns undefined if no errors, or the error messages with keys corresponding to property names */\n validate(): RowValidationErrors | undefined\n\n /**\n * Convert a cell to the declared type of the keyed property\n * @param key name of property to receive the value\n * @param value any value representation\n */\n typeCast(key: string, value: any): any\n\n /** Converts instance to plain javascript object */\n toObject(): Record<string, unknown>\n\n /**\n * Converts from plain javascript object to class instance\n * @param obj to assign to row. Uses properties of the same name\n */\n fromObject(obj: Record<string, unknown>): IRowModel\n\n /** Converts instance to IArtifact javascript object for storing in a Looker instance\n * the required columns are:\n * - key: unique key identifying this item, automatically managed\n * - value: IRowModel descendant nested properties with values from the `headers` keys\n * - version: version number of the artifact\n * - content_type: for WhollyArtifacts, always \"application/json\"\n */\n toArtifact(): Partial<IUpdateArtifact>\n\n /** Converts from IArtifact interface to class instance\n *\n * @param obj to assign to row\n */\n fromArtifact(obj: Partial<IArtifact>): IRowModel\n\n /** Mark a row for update. Sets the $action and returns true if the row can be marked for updating. Throws error otherwise */\n setUpdate(): boolean\n\n /** Mark a row for deletion. Sets the $action and returns true if the row can be marked for deleting. Throws error otherwise */\n setDelete(): boolean\n\n /** Mark a row for creation. Sets the $action and returns true if the row can be marked for creating. Throws error otherwise */\n setCreate(): boolean\n\n /** True if this item has NOT been saved to the artifact store. False otherwise */\n isNew(): boolean\n\n /** True if this item HAS been saved to the artifact store. False otherwise */\n isStored(): boolean\n\n /** Namespace of artifact storage bucket to use for this collection */\n namespace(): string\n\n /**\n * RowModel prefix to use for generating new key values. For example, a prefix() that returns `Hackathon` would\n * result in a key assignment like `Hackathon:9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d`\n *\n * When using artifact collections like data tables, artifact key values are intended to be hidden from the UI.\n * This prefix is purely used for making it feasible to query an artifact collection by its prefix key value\n * Must be implemented.\n */\n tableName(): string\n\n /**\n * Combines prefix() with a UUID to create a filterable key pattern\n * makey makey!\n */\n makey(): string\n}\n\nexport abstract class RowModel<T extends IRowModel> implements IRowModel {\n _row = 0\n _id = ''\n _updated: Date = noDate\n\n $artifact: Partial<IArtifact> = {\n version: 0,\n }\n\n constructor(values?: any) {\n this.initValues(values)\n if (!this.key) {\n this.key = this.makey()\n this.$_action = RowAction.Create\n }\n }\n\n isNew() {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.$artifact.version! < 1\n }\n\n isStored() {\n return !this.isNew()\n }\n\n private $_action: RowAction = RowAction.None\n\n private static hide = new Set(['_row'])\n\n /**\n * initializes values by position, iterating the header keys\n * @param values to initialize\n * @private\n */\n private initFromArray(values?: any) {\n if (Array.isArray(values)) {\n const keys = this.header()\n if (Array.isArray(values)) {\n // Assign by position\n values.forEach((val, index) => {\n if (val !== undefined && val !== null && index < keys.length) {\n const key = keys[index]\n this[key] = this.typeCast(key, val)\n }\n })\n }\n return true\n }\n return false\n }\n\n /**\n * Initializes values from any of:\n * - an array\n * - a value object\n * - an artifact object\n * @param values to initialize\n * @private\n */\n private initValues(values?: any) {\n if (this.initFromArray(values)) return\n if (typeof values === 'object' && values !== null && values !== undefined) {\n const nested = 'value' in values\n let value = nested ? values.value : values\n if (nested) {\n this.$artifact = values\n }\n if (typeof value === 'string') {\n try {\n value = JSON.parse(value)\n } catch (e: any) {\n if (\n values.$artifact?.content_type?.localeCompare(APP_JSON, 'en', {\n sensitivity: 'base',\n }) === 0\n ) {\n throw new LookerSDKError(`Expected ${APP_JSON} but got ${e}`)\n } else {\n throw new LookerSDKError(e)\n }\n }\n }\n Object.keys(value).forEach((k) => {\n this[k] = this.typeCast(k, value[k])\n if (typeof this[k] === 'string') {\n this[k] = decodeURI(this[k])\n }\n })\n if (values.key) this.key = values.key\n return true\n }\n return false\n }\n\n /**\n * RowModel prefix to use for generating new key values. For example, a prefix() that returns `Hackathon` would\n * result in a key assignment like `Hackathon:9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d`\n *\n * When using artifact collections like data tables, artifact key values are intended to be hidden from the UI.\n * This prefix is purely used for making it feasible to query an artifact collection by its prefix key value\n */\n tableName() {\n return this.constructor.name\n }\n\n makey() {\n return `${this.tableName()}:${uuidv4()}`\n }\n\n get key() {\n return this._id\n }\n\n set key(value) {\n this._id = value\n this.$artifact.key = value\n }\n\n private oops(message: string) {\n throw new LookerSDKError(`${this.key}: ${message}`)\n }\n\n get $action(): RowAction {\n if (this.$_action === RowAction.None && this.isNew())\n return RowAction.Create\n return this.$_action\n }\n\n set $action(value: RowAction) {\n switch (value) {\n case RowAction.Create: {\n if (this.isStored()) this.oops(`can't create an existing item`)\n break\n }\n case RowAction.Delete: {\n if (this.isNew()) {\n this.oops(`can't delete a new item`)\n }\n break\n }\n case RowAction.Update: {\n if (this.isNew()) {\n this.oops(`can't update a new item`)\n }\n break\n }\n case RowAction.None: {\n if (this.isNew()) {\n this.oops(`Action must be assigned for a new item`)\n }\n break\n }\n }\n this.$_action = value\n }\n\n setCreate(): boolean {\n this.$action = RowAction.Create\n return true\n }\n\n setUpdate(): boolean {\n this.$action = RowAction.Update\n return true\n }\n\n setDelete(): boolean {\n this.$action = RowAction.Delete\n return true\n }\n\n keys(): ColumnHeaders {\n return Object.keys(this)\n }\n\n header(): ColumnHeaders {\n const keys = this.keys()\n const result = keys.filter(\n (v) => !(v.startsWith('$') || RowModel.hide.has(v))\n )\n return result\n }\n\n displayHeader(): ColumnHeaders {\n return this.header().filter(\n (v) => !(v.startsWith('_') || RowModel.hide.has(v))\n )\n }\n\n prepare(): T {\n if (!this.key) {\n // Generate id if not assigned\n this.key = this.makey()\n this.$action = RowAction.Create\n }\n /** Always update the \"updated\" value before saving */\n this._updated = new Date()\n return this as unknown as T\n }\n\n values() {\n const result: SheetValues = []\n const keys = this.header()\n keys.forEach((key) => {\n result.push(stringer(this[key]))\n })\n return result\n }\n\n typeCast(key: string, value: any) {\n if (value === undefined || value === null) value = ''\n const type = typeof this[key]\n const fromType = typeof value\n if (type === fromType) {\n // No conversion required\n return value\n }\n if (type === 'string') {\n return value.toString()\n }\n if (type === 'number') {\n if (value === '') return 0\n const isInt = /^([+-]?[1-9]\\d*|0)$/\n if (value.toString().match(isInt)) {\n return parseInt(value, 10)\n }\n return parseFloat(value)\n }\n if (type === 'boolean') {\n return boolDefault(value, false)\n }\n if (this[key] instanceof Date) {\n if (value) return new Date(value)\n return noDate\n }\n if (Array.isArray(this[key])) {\n if (!value) return []\n return value.toString().split(',')\n }\n return value\n }\n\n assign(values: any): T {\n if (values) {\n this.initValues(values)\n }\n return this as unknown as T\n }\n\n /** default to no errors */\n validate(): RowValidationErrors | undefined {\n return undefined\n }\n\n toObject(): Record<string, unknown> {\n return omit({ ...this }, ['$_action'])\n }\n\n fromObject(obj: Record<string, unknown>): IRowModel {\n return this.assign(obj)\n }\n\n fromArtifact(obj: Partial<IArtifact>): IRowModel {\n return this.assign(obj)\n }\n\n /**\n * Values to store in attribute\n *\n * All string values are stored with encodeURI to prevent character encoding issues\n * @private\n */\n private storageValues() {\n const result = {}\n // TODO after migrating from sheets, use `key` as this.keyColumn rather than `_id` and use displayHeader()\n // const keys = this.displayHeader()\n const keys = this.header()\n for (const key of keys) {\n const val =\n typeof this[key] === 'string' ? encodeURI(this[key]) : this[key]\n result[key] = val\n }\n return result\n }\n\n toArtifact(): Partial<IUpdateArtifact> {\n return {\n key: this.key,\n value: JSON.stringify(this.storageValues()),\n version: this.$artifact.version ?? 0,\n content_type: APP_JSON,\n } as Partial<IArtifact>\n }\n\n abstract namespace(): string\n}\n\n// TODO figure out the TypeScript magic for this to work\nexport type RowModelFactory<T extends IRowModel> = { new (values?: any): T }\n\n// export const RowModelCreator: RowModelFactory<IRowModel> = (values?: any) =>\n// new RowModel(values)\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RowModel.js","names":["v4","uuidv4","boolDefault","LookerSDKError","omit","noDate","Date","APP_JSON","nilCell","addMinutes","date","minutes","getTime","stringer","value","undefined","toISOString","toString","rowPosition","RowAction","RowModel","constructor","values","_defineProperty","version","None","initValues","key","makey","$_action","Create","isNew","$artifact","isStored","initFromArray","Array","isArray","keys","header","forEach","val","index","length","typeCast","nested","JSON","parse","e","_values$$artifact","_values$$artifact$con","content_type","localeCompare","sensitivity","concat","Object","k","decodeURI","tableName","name","_id","oops","message","$action","Delete","Update","setCreate","setUpdate","setDelete","result","filter","v","startsWith","hide","has","displayHeader","prepare","_updated","push","type","fromType","isInt","match","parseInt","parseFloat","split","assign","validate","toObject","_objectSpread","fromObject","obj","fromArtifact","storageValues","encodeURI","toArtifact","_this$$artifact$versi","stringify","Set"],"sources":["../../src/RowModel.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport { v4 as uuidv4 } from 'uuid'\nimport { boolDefault, LookerSDKError } from '@looker/sdk-rtl'\nimport omit from 'lodash/omit'\nimport type { IArtifact, IUpdateArtifact } from '@looker/sdk'\nexport type SheetValues = any[]\n\nexport const noDate = new Date(-8640000000000000)\nexport const APP_JSON = 'application/json'\n\n/** Signifies an empty cell */\nexport const nilCell = '\\0'\n\nexport const addMinutes = (date: Date, minutes: number) => {\n return new Date(date.getTime() + minutes * 60000)\n}\n\n/** Convert a value to the string representation for a cell value */\nexport const stringer = (value: any) => {\n if (value === undefined || value === null) return nilCell\n if (value instanceof Date) {\n if (value === noDate) return nilCell\n return value.toISOString()\n }\n return value.toString()\n}\n\n/** Key/value pairs for tab data */\nexport type RowValues = Record<string, any>\n\n/** Sheet (tab) column header definition */\nexport type ColumnHeaders = string[]\n\n/** name of the property that tracks the row's position in the tab sheet */\nexport const rowPosition = '_row'\n\nexport interface IRowValidationError {\n message: string\n type: 'error'\n}\n\nexport type RowValidationErrors = Record<string, IRowValidationError>\n\nexport enum RowAction {\n None,\n Create,\n Update,\n Delete,\n}\n\n/**\n * Includes type-specific properties and base Looker Artifact properties where the JSON\n * data in the artifact value property will be extracted into the type-specific\n * properties of the row model\n */\nexport interface IRowModelProps extends RowValues {\n /** Row position in sheet for this item. Usually assigned in WhollySheet processing */\n _row: number\n /**\n * Unique ID for this row. This is an alias for the artifact's key.\n * It's assigned to a combination type name:UUID in prepare()\n *\n * TODO remove this property entirely after changing the `_id` refs in the Hackathon app to use `key`\n */\n _id: string\n /**\n * Updated date/time stamp for this row. Always set in prepare().\n * TODO remove this property entirely because the artifact `version` property performs the version locking\n */\n _updated: Date\n\n /** Batch update action. Defaults to RowAction.None, so the row is not part of the delta */\n $action: RowAction\n /** Looker API key/value store artifact object for managing this row */\n $artifact: Partial<IArtifact>\n}\n\n/** Keyed data for a sheet row */\nexport interface IRowModel extends IRowModelProps {\n /**\n * Assign a value array or object to the typed row\n *\n * @param values an array of values, or an object with matching keys\n */\n assign(values: any): IRowModel\n\n /** All keys for this object, but overrideable */\n keys(): ColumnHeaders\n\n /** The sheet Column Headers keys for this model */\n header(): ColumnHeaders\n\n /** The display column headers for this model */\n displayHeader(): ColumnHeaders\n\n /** Column values in the correct order to write the entire row to the GSheet */\n values(): SheetValues\n\n /**\n * Prepare the row for saving. This includes auto-generation of _id and updating _update\n * Override this for error handling, calculations, and other default initializations\n * to avoid persisting bad data values to the sheet\n */\n prepare(): IRowModel\n\n /** Returns undefined if no errors, or the error messages with keys corresponding to property names */\n validate(): RowValidationErrors | undefined\n\n /**\n * Convert a cell to the declared type of the keyed property\n * @param key name of property to receive the value\n * @param value any value representation\n */\n typeCast(key: string, value: any): any\n\n /** Converts instance to plain javascript object */\n toObject(): Record<string, unknown>\n\n /**\n * Converts from plain javascript object to class instance\n * @param obj to assign to row. Uses properties of the same name\n */\n fromObject(obj: Record<string, unknown>): IRowModel\n\n /** Converts instance to IArtifact javascript object for storing in a Looker instance\n * the required columns are:\n * - key: unique key identifying this item, automatically managed\n * - value: IRowModel descendant nested properties with values from the `headers` keys\n * - version: version number of the artifact\n * - content_type: for WhollyArtifacts, always \"application/json\"\n */\n toArtifact(): Partial<IUpdateArtifact>\n\n /** Converts from IArtifact interface to class instance\n *\n * @param obj to assign to row\n */\n fromArtifact(obj: Partial<IArtifact>): IRowModel\n\n /** Mark a row for update. Sets the $action and returns true if the row can be marked for updating. Throws error otherwise */\n setUpdate(): boolean\n\n /** Mark a row for deletion. Sets the $action and returns true if the row can be marked for deleting. Throws error otherwise */\n setDelete(): boolean\n\n /** Mark a row for creation. Sets the $action and returns true if the row can be marked for creating. Throws error otherwise */\n setCreate(): boolean\n\n /** True if this item has NOT been saved to the artifact store. False otherwise */\n isNew(): boolean\n\n /** True if this item HAS been saved to the artifact store. False otherwise */\n isStored(): boolean\n\n /** Namespace of artifact storage bucket to use for this collection */\n namespace(): string\n\n /**\n * RowModel prefix to use for generating new key values. For example, a prefix() that returns `Hackathon` would\n * result in a key assignment like `Hackathon:9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d`\n *\n * When using artifact collections like data tables, artifact key values are intended to be hidden from the UI.\n * This prefix is purely used for making it feasible to query an artifact collection by its prefix key value\n * Must be implemented.\n */\n tableName(): string\n\n /**\n * Combines prefix() with a UUID to create a filterable key pattern\n * makey makey!\n */\n makey(): string\n}\n\nexport abstract class RowModel<T extends IRowModel> implements IRowModel {\n _row = 0\n _id = ''\n _updated: Date = noDate\n\n $artifact: Partial<IArtifact> = {\n version: 0,\n }\n\n constructor(values?: any) {\n this.initValues(values)\n if (!this.key) {\n this.key = this.makey()\n this.$_action = RowAction.Create\n }\n }\n\n isNew() {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.$artifact.version! < 1\n }\n\n isStored() {\n return !this.isNew()\n }\n\n private $_action: RowAction = RowAction.None\n\n private static hide = new Set(['_row'])\n\n /**\n * initializes values by position, iterating the header keys\n * @param values to initialize\n * @private\n */\n private initFromArray(values?: any) {\n if (Array.isArray(values)) {\n const keys = this.header()\n if (Array.isArray(values)) {\n // Assign by position\n values.forEach((val, index) => {\n if (val !== undefined && val !== null && index < keys.length) {\n const key = keys[index]\n this[key] = this.typeCast(key, val)\n }\n })\n }\n return true\n }\n return false\n }\n\n /**\n * Initializes values from any of:\n * - an array\n * - a value object\n * - an artifact object\n * @param values to initialize\n * @private\n */\n private initValues(values?: any) {\n if (this.initFromArray(values)) return\n if (typeof values === 'object' && values !== null && values !== undefined) {\n const nested = 'value' in values\n let value = nested ? values.value : values\n if (nested) {\n this.$artifact = values\n }\n if (typeof value === 'string') {\n try {\n value = JSON.parse(value)\n } catch (e: any) {\n if (\n values.$artifact?.content_type?.localeCompare(APP_JSON, 'en', {\n sensitivity: 'base',\n }) === 0\n ) {\n throw new LookerSDKError(`Expected ${APP_JSON} but got ${e}`)\n } else {\n throw new LookerSDKError(e)\n }\n }\n }\n Object.keys(value).forEach((k) => {\n this[k] = this.typeCast(k, value[k])\n if (typeof this[k] === 'string') {\n this[k] = decodeURI(this[k])\n }\n })\n if (values.key) this.key = values.key\n return true\n }\n return false\n }\n\n /**\n * RowModel prefix to use for generating new key values. For example, a prefix() that returns `Hackathon` would\n * result in a key assignment like `Hackathon:9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d`\n *\n * When using artifact collections like data tables, artifact key values are intended to be hidden from the UI.\n * This prefix is purely used for making it feasible to query an artifact collection by its prefix key value\n */\n tableName() {\n return this.constructor.name\n }\n\n makey() {\n return `${this.tableName()}:${uuidv4()}`\n }\n\n get key() {\n return this._id\n }\n\n set key(value) {\n this._id = value\n this.$artifact.key = value\n }\n\n private oops(message: string) {\n throw new LookerSDKError(`${this.key}: ${message}`)\n }\n\n get $action(): RowAction {\n if (this.$_action === RowAction.None && this.isNew())\n return RowAction.Create\n return this.$_action\n }\n\n set $action(value: RowAction) {\n switch (value) {\n case RowAction.Create: {\n if (this.isStored()) this.oops(`can't create an existing item`)\n break\n }\n case RowAction.Delete: {\n if (this.isNew()) {\n this.oops(`can't delete a new item`)\n }\n break\n }\n case RowAction.Update: {\n if (this.isNew()) {\n this.oops(`can't update a new item`)\n }\n break\n }\n case RowAction.None: {\n if (this.isNew()) {\n this.oops(`Action must be assigned for a new item`)\n }\n break\n }\n }\n this.$_action = value\n }\n\n setCreate(): boolean {\n this.$action = RowAction.Create\n return true\n }\n\n setUpdate(): boolean {\n this.$action = RowAction.Update\n return true\n }\n\n setDelete(): boolean {\n this.$action = RowAction.Delete\n return true\n }\n\n keys(): ColumnHeaders {\n return Object.keys(this)\n }\n\n header(): ColumnHeaders {\n const keys = this.keys()\n const result = keys.filter(\n (v) => !(v.startsWith('$') || RowModel.hide.has(v))\n )\n return result\n }\n\n displayHeader(): ColumnHeaders {\n return this.header().filter(\n (v) => !(v.startsWith('_') || RowModel.hide.has(v))\n )\n }\n\n prepare(): T {\n if (!this.key) {\n // Generate id if not assigned\n this.key = this.makey()\n this.$action = RowAction.Create\n }\n /** Always update the \"updated\" value before saving */\n this._updated = new Date()\n return this as unknown as T\n }\n\n values() {\n const result: SheetValues = []\n const keys = this.header()\n keys.forEach((key) => {\n result.push(stringer(this[key]))\n })\n return result\n }\n\n typeCast(key: string, value: any) {\n if (value === undefined || value === null) value = ''\n const type = typeof this[key]\n const fromType = typeof value\n if (type === fromType) {\n // No conversion required\n return value\n }\n if (type === 'string') {\n return value.toString()\n }\n if (type === 'number') {\n if (value === '') return 0\n const isInt = /^([+-]?[1-9]\\d*|0)$/\n if (value.toString().match(isInt)) {\n return parseInt(value, 10)\n }\n return parseFloat(value)\n }\n if (type === 'boolean') {\n return boolDefault(value, false)\n }\n if (this[key] instanceof Date) {\n if (value) return new Date(value)\n return noDate\n }\n if (Array.isArray(this[key])) {\n if (!value) return []\n return value.toString().split(',')\n }\n return value\n }\n\n assign(values: any): T {\n if (values) {\n this.initValues(values)\n }\n return this as unknown as T\n }\n\n /** default to no errors */\n validate(): RowValidationErrors | undefined {\n return undefined\n }\n\n toObject(): Record<string, unknown> {\n return omit({ ...this }, ['$_action'])\n }\n\n fromObject(obj: Record<string, unknown>): IRowModel {\n return this.assign(obj)\n }\n\n fromArtifact(obj: Partial<IArtifact>): IRowModel {\n return this.assign(obj)\n }\n\n /**\n * Values to store in attribute\n *\n * All string values are stored with encodeURI to prevent character encoding issues\n * @private\n */\n private storageValues() {\n const result = {}\n // TODO after migrating from sheets, use `key` as this.keyColumn rather than `_id` and use displayHeader()\n // const keys = this.displayHeader()\n const keys = this.header()\n for (const key of keys) {\n const val =\n typeof this[key] === 'string' ? encodeURI(this[key]) : this[key]\n result[key] = val\n }\n return result\n }\n\n toArtifact(): Partial<IUpdateArtifact> {\n return {\n key: this.key,\n value: JSON.stringify(this.storageValues()),\n version: this.$artifact.version ?? 0,\n content_type: APP_JSON,\n } as Partial<IArtifact>\n }\n\n abstract namespace(): string\n}\n\n// TODO figure out the TypeScript magic for this to work\nexport type RowModelFactory<T extends IRowModel> = { new (values?: any): T }\n\n// export const RowModelCreator: RowModelFactory<IRowModel> = (values?: any) =>\n// new RowModel(values)\n"],"mappings":"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"}
|
|
@@ -1,20 +1,13 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.compareDates = exports.WhollyArtifact = exports.TypedRows = void 0;
|
|
7
|
-
var _sdkRtl = require("@looker/sdk-rtl");
|
|
8
|
-
var _sdk = require("@looker/sdk");
|
|
9
|
-
var _RowModel = require("./RowModel");
|
|
10
1
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
11
2
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
12
3
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
13
4
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
14
5
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
import { LookerSDKError } from '@looker/sdk-rtl';
|
|
7
|
+
import { artifact, delete_artifact, search_artifacts, update_artifacts } from '@looker/sdk';
|
|
8
|
+
import { RowAction, rowPosition, stringer } from './RowModel';
|
|
9
|
+
export var compareDates = (a, b) => a.getTime() - b.getTime();
|
|
10
|
+
export class TypedRows {
|
|
18
11
|
constructor(rows, Maker) {
|
|
19
12
|
_defineProperty(this, "rows", []);
|
|
20
13
|
if (Maker) {
|
|
@@ -42,8 +35,7 @@ class TypedRows {
|
|
|
42
35
|
return new TypedRows(values !== null && values !== void 0 ? values : []);
|
|
43
36
|
}
|
|
44
37
|
}
|
|
45
|
-
|
|
46
|
-
class WhollyArtifact extends TypedRows {
|
|
38
|
+
export class WhollyArtifact extends TypedRows {
|
|
47
39
|
constructor(sdk, table) {
|
|
48
40
|
var keyColumn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '_id';
|
|
49
41
|
super([]);
|
|
@@ -69,7 +61,7 @@ class WhollyArtifact extends TypedRows {
|
|
|
69
61
|
var _this = this;
|
|
70
62
|
return _asyncToGenerator(function* () {
|
|
71
63
|
if (!values) {
|
|
72
|
-
values = yield _this.sdk.ok(
|
|
64
|
+
values = yield _this.sdk.ok(search_artifacts(_this.sdk, {
|
|
73
65
|
namespace: _this.namespace,
|
|
74
66
|
key: "".concat(_this.tableName, ":%")
|
|
75
67
|
}));
|
|
@@ -85,7 +77,7 @@ class WhollyArtifact extends TypedRows {
|
|
|
85
77
|
rows.forEach(r => {
|
|
86
78
|
var row = this.typeRow(r);
|
|
87
79
|
pos++;
|
|
88
|
-
if (!row[
|
|
80
|
+
if (!row[rowPosition]) row[rowPosition] = pos;
|
|
89
81
|
result.push(row);
|
|
90
82
|
});
|
|
91
83
|
return result;
|
|
@@ -99,7 +91,7 @@ class WhollyArtifact extends TypedRows {
|
|
|
99
91
|
var row = this.rows[0];
|
|
100
92
|
var rowHeader = row.header().join();
|
|
101
93
|
var tableHeader = this.table.header.join();
|
|
102
|
-
if (tableHeader !== rowHeader) throw new
|
|
94
|
+
if (tableHeader !== rowHeader) throw new LookerSDKError("Expected ".concat(this.tableName, " header to be ").concat(rowHeader, " not ").concat(tableHeader));
|
|
103
95
|
return true;
|
|
104
96
|
}
|
|
105
97
|
get header() {
|
|
@@ -117,7 +109,7 @@ class WhollyArtifact extends TypedRows {
|
|
|
117
109
|
values(model) {
|
|
118
110
|
var result = [];
|
|
119
111
|
this.header.forEach(h => {
|
|
120
|
-
result.push(
|
|
112
|
+
result.push(stringer(model[h]));
|
|
121
113
|
});
|
|
122
114
|
return result;
|
|
123
115
|
}
|
|
@@ -132,16 +124,16 @@ class WhollyArtifact extends TypedRows {
|
|
|
132
124
|
return _asyncToGenerator(function* () {
|
|
133
125
|
var force = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;
|
|
134
126
|
switch (model.$action) {
|
|
135
|
-
case
|
|
127
|
+
case RowAction.Delete:
|
|
136
128
|
{
|
|
137
|
-
yield _this2.sdk.ok(
|
|
129
|
+
yield _this2.sdk.ok(delete_artifact(_this2.sdk, _this2.namespace, model[_this2.keyColumn]));
|
|
138
130
|
return model;
|
|
139
131
|
}
|
|
140
|
-
case
|
|
132
|
+
case RowAction.Update:
|
|
141
133
|
{
|
|
142
134
|
return yield _this2.update(model, force);
|
|
143
135
|
}
|
|
144
|
-
case
|
|
136
|
+
case RowAction.None:
|
|
145
137
|
{
|
|
146
138
|
return model;
|
|
147
139
|
}
|
|
@@ -150,12 +142,12 @@ class WhollyArtifact extends TypedRows {
|
|
|
150
142
|
})();
|
|
151
143
|
}
|
|
152
144
|
checkId(model) {
|
|
153
|
-
if (!model[this.keyColumn]) throw new
|
|
145
|
+
if (!model[this.keyColumn]) throw new LookerSDKError("\"".concat(this.keyColumn, "\" must be assigned for ").concat(this.tableName, " row ").concat(model._row));
|
|
154
146
|
}
|
|
155
147
|
create(model) {
|
|
156
148
|
var _this3 = this;
|
|
157
149
|
return _asyncToGenerator(function* () {
|
|
158
|
-
if (model._row > 0) throw new
|
|
150
|
+
if (model._row > 0) throw new LookerSDKError("create needs ".concat(_this3.tableName, " \"").concat(model[_this3.keyColumn], "\" row to be < 1, not ").concat(model._row));
|
|
159
151
|
model.prepare();
|
|
160
152
|
_this3.checkId(model);
|
|
161
153
|
yield _this3.createUpdateBatch([model]);
|
|
@@ -167,7 +159,7 @@ class WhollyArtifact extends TypedRows {
|
|
|
167
159
|
_this4 = this;
|
|
168
160
|
return _asyncToGenerator(function* () {
|
|
169
161
|
var _force = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : false;
|
|
170
|
-
if (!model._row) throw new
|
|
162
|
+
if (!model._row) throw new LookerSDKError("".concat(_this4.tableName, " \"").concat(model[_this4.keyColumn], "\" row must be > 0 to update"));
|
|
171
163
|
model.prepare();
|
|
172
164
|
_this4.checkId(model);
|
|
173
165
|
yield _this4.createUpdateBatch([model]);
|
|
@@ -207,10 +199,10 @@ class WhollyArtifact extends TypedRows {
|
|
|
207
199
|
checkOutdated(model, source) {
|
|
208
200
|
var _this6 = this;
|
|
209
201
|
return _asyncToGenerator(function* () {
|
|
210
|
-
if (model[
|
|
202
|
+
if (model[rowPosition] < 1) return false;
|
|
211
203
|
var errors = [];
|
|
212
204
|
if (!source) {
|
|
213
|
-
var art = yield _this6.sdk.ok(
|
|
205
|
+
var art = yield _this6.sdk.ok(artifact(_this6.sdk, {
|
|
214
206
|
namespace: _this6.namespace,
|
|
215
207
|
key: model[_this6.keyColumn]
|
|
216
208
|
}));
|
|
@@ -223,7 +215,7 @@ class WhollyArtifact extends TypedRows {
|
|
|
223
215
|
errors.push("version ".concat(source.$artifact.version, " != ").concat(model.$artifact.version));
|
|
224
216
|
}
|
|
225
217
|
}
|
|
226
|
-
if (errors.length > 0) throw new
|
|
218
|
+
if (errors.length > 0) throw new LookerSDKError("".concat(_this6.tableName, " row ").concat(model[_this6.keyColumn], " is outdated: ").concat(errors.join()));
|
|
227
219
|
return false;
|
|
228
220
|
})();
|
|
229
221
|
}
|
|
@@ -239,17 +231,17 @@ class WhollyArtifact extends TypedRows {
|
|
|
239
231
|
_this7 = this;
|
|
240
232
|
return _asyncToGenerator(function* () {
|
|
241
233
|
var _force = _arguments4.length > 0 && _arguments4[0] !== undefined ? _arguments4[0] : false;
|
|
242
|
-
var updates = _this7.rows.filter(r => r.$action ===
|
|
243
|
-
var deletes = _this7.rows.filter(r => r.$action ===
|
|
234
|
+
var updates = _this7.rows.filter(r => r.$action === RowAction.Update || r.$action === RowAction.Create);
|
|
235
|
+
var deletes = _this7.rows.filter(r => r.$action === RowAction.Delete);
|
|
244
236
|
yield _this7.createUpdateBatch(updates);
|
|
245
237
|
yield _this7.deleteBatch(deletes);
|
|
246
238
|
return _this7.rows;
|
|
247
239
|
})();
|
|
248
240
|
}
|
|
249
241
|
getDelta() {
|
|
250
|
-
var updates = this.rows.filter(r => r.$action ===
|
|
251
|
-
var deletes = this.rows.filter(r => r.$action ===
|
|
252
|
-
var creates = this.rows.filter(r => r.$action ===
|
|
242
|
+
var updates = this.rows.filter(r => r.$action === RowAction.Update);
|
|
243
|
+
var deletes = this.rows.filter(r => r.$action === RowAction.Delete).sort((a, b) => b._row - a._row);
|
|
244
|
+
var creates = this.rows.filter(r => r.$action === RowAction.Create);
|
|
253
245
|
return {
|
|
254
246
|
updates: updates,
|
|
255
247
|
deletes: deletes,
|
|
@@ -271,7 +263,7 @@ class WhollyArtifact extends TypedRows {
|
|
|
271
263
|
} catch (e) {
|
|
272
264
|
errors.push(e.message);
|
|
273
265
|
}
|
|
274
|
-
if (errors.length > 0) throw new
|
|
266
|
+
if (errors.length > 0) throw new LookerSDKError(errors.join('\n'));
|
|
275
267
|
}
|
|
276
268
|
delta.updates.forEach(u => u.prepare());
|
|
277
269
|
delta.creates.forEach(c => c.prepare());
|
|
@@ -283,7 +275,7 @@ class WhollyArtifact extends TypedRows {
|
|
|
283
275
|
if (items.length < 1) return Promise.resolve(_this8.rows);
|
|
284
276
|
var namespace = items[0].namespace();
|
|
285
277
|
var arts = items.map(i => i.toArtifact());
|
|
286
|
-
var result = yield _this8.sdk.ok(
|
|
278
|
+
var result = yield _this8.sdk.ok(update_artifacts(_this8.sdk, namespace, arts));
|
|
287
279
|
result.forEach(r => {
|
|
288
280
|
var row = _this8.typeRow(r);
|
|
289
281
|
var key = row[_this8.keyColumn];
|
|
@@ -297,7 +289,7 @@ class WhollyArtifact extends TypedRows {
|
|
|
297
289
|
var result = [];
|
|
298
290
|
Object.entries(this.index).forEach((_ref, index) => {
|
|
299
291
|
var [_key, row] = _ref;
|
|
300
|
-
row[
|
|
292
|
+
row[rowPosition] = index + 1;
|
|
301
293
|
result.push(row);
|
|
302
294
|
});
|
|
303
295
|
this.rows = result;
|
|
@@ -309,12 +301,11 @@ class WhollyArtifact extends TypedRows {
|
|
|
309
301
|
if (items.length < 1) return Promise.resolve(_this9.rows);
|
|
310
302
|
var namespace = items[0].namespace();
|
|
311
303
|
var keys = items.map(r => r[_this9.keyColumn]);
|
|
312
|
-
yield _this9.sdk.ok(
|
|
304
|
+
yield _this9.sdk.ok(delete_artifact(_this9.sdk, namespace, keys.join()));
|
|
313
305
|
keys.forEach(k => delete _this9.index[k]);
|
|
314
306
|
_this9.updateRowsFromIndex();
|
|
315
307
|
return Promise.resolve(_this9.rows);
|
|
316
308
|
})();
|
|
317
309
|
}
|
|
318
310
|
}
|
|
319
|
-
exports.WhollyArtifact = WhollyArtifact;
|
|
320
311
|
//# sourceMappingURL=WhollyArtifact.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhollyArtifact.js","names":["_sdkRtl","require","_sdk","_RowModel","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","_defineProperty","obj","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","res","call","TypeError","Number","compareDates","a","b","getTime","exports","TypedRows","constructor","rows","Maker","map","v","add","push","where","predicate","from","filter","select","selector","toArray","values","create","WhollyArtifact","sdk","table","keyColumn","length","loadRows","meta","typeRow","namespace","tableName","typeRows","checkHeader","createIndex","refresh","_this","ok","search_artifacts","concat","result","pos","forEach","r","row","rowPosition","toAT","rowHeader","header","join","tableHeader","LookerSDKError","nextRow","index","model","h","stringer","allValues","save","_arguments","_this2","force","$action","RowAction","Delete","delete_artifact","Update","update","None","checkId","_row","_this3","prepare","createUpdateBatch","_arguments2","_this4","_force","find","columnName","toString","displayHeader","_displayHeader","colName","displayable","delete","_arguments3","_this5","checkOutdated","deleteBatch","startsWith","source","_this6","errors","art","artifact","$artifact","version","fromObject","toObject","batchUpdate","_arguments4","_this7","updates","Create","deletes","getDelta","sort","creates","mergePurge","delta","u","d","splice","c","prepareBatch","e","message","items","_this8","arts","i","toArtifact","update_artifacts","updateRowsFromIndex","entries","_ref","_key","_this9","keys","k"],"sources":["../../src/WhollyArtifact.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { IAPIMethods } from '@looker/sdk-rtl'\nimport { LookerSDKError } from '@looker/sdk-rtl'\nimport type { IArtifact, IUpdateArtifact } from '@looker/sdk'\nimport {\n artifact,\n delete_artifact,\n search_artifacts,\n update_artifacts,\n} from '@looker/sdk'\nimport type { ColumnHeaders, IRowModel, SheetValues } from './RowModel'\nimport { RowAction, rowPosition, stringer } from './RowModel'\n\n/**\n * Compare dates without running into numeric comparison problems\n * @param a first date to compare\n * @param b second date to compare\n * @returns 0 if dates are equal, positive if a > b, negative if a < b\n */\nexport const compareDates = (a: Date, b: Date) => a.getTime() - b.getTime()\n\nexport interface IMaker<T> {\n new (values?: any): T\n}\n\nexport interface IRowDelta<T extends IRowModel> {\n updates: T[]\n deletes: T[]\n creates: T[]\n}\n\n// TODO maybe get a technique from https://stackoverflow.com/a/34698946 or\n// https://www.logicbig.com/tutorials/misc/typescript/generic-constraints.html\n\n// TODO refactor WhollyArtifact<T> into something a bit cleaner\n// ref https://www.smashingmagazine.com/2020/10/understanding-typescript-generics/\nexport class TypedRows<T> {\n rows: T[] = []\n\n constructor(rows: T[], Maker?: IMaker<T>) {\n if (Maker) {\n this.rows = rows.map((v) => new Maker(v))\n } else {\n this.rows = rows\n }\n }\n\n public add(value: T): void {\n this.rows.push(value)\n }\n\n public where(predicate: (value: T) => boolean): TypedRows<T> {\n return TypedRows.from<T>(this.rows.filter(predicate))\n }\n\n public select<U>(selector: (value: T) => U): TypedRows<U> {\n return TypedRows.from<U>(this.rows.map(selector))\n }\n\n public toArray(): T[] {\n return this.rows\n }\n\n public static from<U>(values: U[]): TypedRows<U> {\n // Perhaps we perform some logic here.\n // ...\n\n return new TypedRows<U>(values)\n }\n\n public static create<U>(values?: U[]): TypedRows<U> {\n return new TypedRows<U>(values ?? [])\n }\n\n // Other collection functions.\n // ..\n}\n\nexport interface IWhollyArtifact<T extends IRowModel, P> {\n /** Any initialized Looker TypeScript SDK */\n sdk: IAPIMethods\n\n /** Namespace of this collection. Retrieved from IRowModel descendant */\n namespace: string\n\n /**\n * Name of this artifact \"table\". Used for table-level processing of the artifacts in a namespace.\n * Retrieved from IRowModel descendant\n */\n tableName: string\n\n /**\n /**\n * Header column names for reading from/writing to the sheet.\n * The order of the column names **must** match the order of the columns in the sheet.\n * The values used to read and write the sheet are always in column order position.\n */\n header: ColumnHeaders\n /** Column names to display */\n displayHeader: ColumnHeaders\n /** Name of the key column that represents the \"id\" */\n keyColumn: string\n /** All data in the sheet */\n rows: T[]\n /** Keyed row retrieval */\n index: Record<string, T>\n /** What's the next row of the sheet? */\n nextRow: number\n\n // TODO figure out init generic typing issue\n // init(values?: any): (values?: any) => T\n\n /**\n * Verify the column order in the sheet matches the key order of the row type\n * @param header array of column names in order\n */\n checkHeader(header: ColumnHeaders): boolean\n\n /**\n * True if the column name should be displayed in a UI\n *\n * False if it's an \"internal\" column name\n *\n * @param columnName to check for display\n */\n displayable(columnName: string): boolean\n\n /**\n * Gets the row's values in table.header column order\n * @param model row to introspect\n */\n values(model: T): SheetValues\n\n /**\n * Returns a 2D array of all row values based on the current rows collection.\n * The result include the header row\n */\n allValues(): SheetValues\n\n /**\n * Create a new row of this type\n * @param values either a value array or an object\n */\n typeRow<T extends IRowModel>(values?: any): T\n\n /**\n * Converts raw rows into typed rows.\n *\n * @param rows array of data to convert. Either value arrays or a collection of objects\n */\n typeRows<T extends IRowModel>(rows: SheetValues): T[]\n\n /**\n * Reload the entire tab by fetching all its values from the GSheet\n * @param values to use for refresh. If not provided, artifacts for the namespace will be searched\n */\n refresh<T extends IRowModel>(values?: any): Promise<T[]>\n\n /**\n * Save the specified row to the sheet.\n *\n * This routine determines whether to call update or create based on whether the row position is < 1\n *\n * @param model row to save\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n save<T extends IRowModel>(model: T, force?: boolean): Promise<T>\n\n /**\n * Create a row in the sheet\n *\n * If the row position is > 0 an error is thrown\n *\n * @param model row to create in sheet\n */\n create<T extends IRowModel>(model: T): Promise<T>\n\n /**\n * Update a row in the sheet\n *\n * If the row position is < 1 an error is thrown\n *\n * If the row is checkOutdated an error is thrown\n *\n * @param model row to create in sheet\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n update<T extends IRowModel>(model: T, force?: boolean): Promise<T>\n\n /**\n * Delete a row if it still exists\n * @param model to delete\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n delete<T extends IRowModel>(model: T, force?: boolean): Promise<boolean>\n\n /**\n * If the row is out of date, it throws a LookerSDKError\n * @param model row for status check\n * @param source row to compare against\n */\n checkOutdated<T extends IRowModel>(model: T, source?: T): Promise<boolean>\n\n /**\n * Find the matching row. If columnName is the primary key field, indexed retrieval is used\n *\n * @param value to find\n * @param columnName in which to find the value. Defaults to primary key. If primary key, indexed retrieval is use.\n */\n find(value: any, columnName?: string): T | undefined\n\n /**\n * Reassigns collection rows, checks header, and reindexes\n * @param rows to overwrite current list\n */\n loadRows<T extends IRowModel>(rows: SheetValues): T[]\n\n /** Converts the row collection to a plain javascript object array */\n toObject(): P[]\n\n /** Assigns the passed object[] to the rows collection */\n fromObject<T extends IRowModel>(obj: P[]): T[]\n\n /** Gets the delta rows for a batch update */\n getDelta<T extends IRowModel>(): IRowDelta<T>\n\n /**\n * Processes a delta change against the tab values snapshot\n * @param tab SheetValues to update (includes header row)\n * @param delta row changes to apply\n */\n mergePurge<T extends IRowModel>(\n tab: SheetValues,\n delta: IRowDelta<T>\n ): SheetValues\n\n /**\n * Prepare a batch for processing\n *\n * If `force` is false and update rows are outdated, a LookerSDKError with outdated list is thrown\n * @param tab of sheet values to use for update checks (includes header row)\n * @param delta change to merge and purge\n * @param force prepare each row but don't worry about outdated rows\n */\n prepareBatch<T extends IRowModel>(\n tab: SheetValues,\n delta: IRowDelta<T>,\n force?: boolean\n ): boolean\n\n /**\n * collect all rows to be updated or created and submit the request\n * and returns the updated collection\n *\n * @param items list of items to update or create\n */\n createUpdateBatch<T extends IRowModel>(items: T[]): Promise<T[]>\n\n /**\n * removes all rows marked for deletion and returns the updated collection\n *\n * @param items list of items to delete\n */\n deleteBatch<T extends IRowModel>(items: T[]): Promise<T[]>\n\n /**\n * Perform a batch update by retrieving the delta for the sheet, check for outdated update rows,\n * and update the entire tab sheet with the changes\n * @param force true to skip checking for outdated update rows\n */\n batchUpdate<T extends IRowModel>(force?: boolean): Promise<T[]>\n}\n\n/**\n * Keyed data for a tab, and the tab's header row\n * TODO delete this bad boy\n */\nexport interface ITabTable {\n /** Array of header names, in column order */\n header: ColumnHeaders\n /** Parsed data for the tab */\n rows: IRowModel[]\n}\n\n/** CRUDS operations for a GSheet tab */\nexport abstract class WhollyArtifact<T extends IRowModel, P>\n extends TypedRows<T>\n implements IWhollyArtifact<T, P>\n{\n index: Record<string, T> = {}\n namespace = ''\n tableName = ''\n\n constructor(\n public readonly sdk: IAPIMethods,\n public readonly table: ITabTable,\n public readonly keyColumn: string = '_id' // TODO change to `key`\n ) {\n super([])\n this.loadRows(table.rows)\n const meta = this.typeRow()\n this.namespace = meta.namespace()\n this.tableName = meta.tableName()\n }\n\n loadRows<T extends IRowModel>(rows: SheetValues): T[] {\n this.rows = this.typeRows(rows)\n this.checkHeader()\n this.createIndex()\n return this.rows as unknown as T[]\n }\n\n async refresh<T extends IRowModel>(values?: any): Promise<T[]> {\n if (!values) {\n values = await this.sdk.ok(\n search_artifacts(this.sdk, {\n namespace: this.namespace,\n key: `${this.tableName}:%`,\n })\n )\n }\n this.rows = this.typeRows(values)\n this.createIndex()\n return this.rows as unknown as T[]\n }\n\n abstract typeRow<T extends IRowModel>(values?: any): T\n\n typeRows<T extends IRowModel>(rows: SheetValues): T[] {\n const result: T[] = []\n let pos = 1\n\n rows.forEach((r) => {\n const row: T = this.typeRow(r)\n pos++\n // fixup row position?\n if (!row[rowPosition]) row[rowPosition] = pos\n result.push(row)\n })\n\n return result\n }\n\n // // TODO figure out init generic typing issue\n // init(values?: any): T {\n // const result: T = new this.NewItem(values)\n // return result\n // }\n\n /**\n * convert value to the strong type, or undefined if not value\n * @param value to strongly type\n * @private\n */\n private static toAT<T extends IRowModel>(value: unknown): T | undefined {\n if (value) return value as T\n return undefined\n }\n\n checkHeader() {\n // Nothing to check\n if (this.rows.length === 0) return true\n const row = this.rows[0]\n const rowHeader = row.header().join()\n const tableHeader = this.table.header.join()\n if (tableHeader !== rowHeader)\n throw new LookerSDKError(\n `Expected ${this.tableName} header to be ${rowHeader} not ${tableHeader}`\n )\n return true\n }\n\n get header() {\n return this.table.header\n }\n\n get nextRow() {\n // +1 for header row\n // +1 for 1-based rows\n return this.rows.length + 2\n }\n\n private createIndex() {\n this.index = {}\n this.rows.forEach((r) => {\n this.index[r[this.keyColumn]] = r\n })\n }\n\n values<T extends IRowModel>(model: T) {\n const result: SheetValues = []\n this.header.forEach((h) => {\n result.push(stringer(model[h]))\n })\n return result\n }\n\n allValues(): SheetValues {\n const values: SheetValues = [this.header]\n values.push(...this.rows.map((r) => this.values(r)))\n return values\n }\n\n async save<T extends IRowModel>(model: T, force = false): Promise<T> {\n switch (model.$action) {\n case RowAction.Delete: {\n await this.sdk.ok(\n delete_artifact(this.sdk, this.namespace, model[this.keyColumn])\n )\n return model\n }\n case RowAction.Update: {\n return await this.update<T>(model, force)\n }\n case RowAction.None: {\n return model\n }\n }\n return (await this.create<T>(model)) as unknown as T\n }\n\n checkId<T extends IRowModel>(model: T) {\n if (!model[this.keyColumn])\n throw new LookerSDKError(\n `\"${this.keyColumn}\" must be assigned for ${this.tableName} row ${model._row}`\n )\n }\n\n async create<T extends IRowModel>(model: T): Promise<T> {\n if (model._row > 0)\n throw new LookerSDKError(\n `create needs ${this.tableName} \"${\n model[this.keyColumn]\n }\" row to be < 1, not ${model._row}`\n )\n model.prepare()\n this.checkId(model)\n await this.createUpdateBatch([model])\n return this.index[model[this.keyColumn]] as unknown as T\n }\n\n async update<T extends IRowModel>(model: T, _force = false): Promise<T> {\n if (!model._row)\n throw new LookerSDKError(\n `${this.tableName} \"${model[this.keyColumn]}\" row must be > 0 to update`\n )\n\n model.prepare()\n this.checkId(model)\n await this.createUpdateBatch([model])\n return this.index[model[this.keyColumn]] as unknown as T\n }\n\n find(value: any, columnName?: string): T | undefined {\n if (!value) return undefined\n let key = columnName || this.keyColumn\n if (typeof value === 'number') {\n // Default key to row\n if (!columnName) key = '_row'\n }\n if (columnName === this.keyColumn) {\n // Find by index\n return WhollyArtifact.toAT(this.index[value.toString()])\n }\n return WhollyArtifact.toAT(this.rows.find((r) => r[key] === value))\n }\n\n private _displayHeader: ColumnHeaders = []\n get displayHeader(): ColumnHeaders {\n if (this._displayHeader.length === 0) {\n this._displayHeader = this.header.filter((colName) =>\n this.displayable(colName)\n )\n }\n return this._displayHeader\n }\n\n async delete<T extends IRowModel>(model: T, force = false) {\n if (!force) await this.checkOutdated(model)\n await this.deleteBatch([model])\n return true\n }\n\n displayable(columnName: string): boolean {\n return !(columnName.startsWith('_') || columnName.startsWith('$'))\n }\n\n async checkOutdated<T extends IRowModel>(model: T, source?: T) {\n if (model[rowPosition] < 1) return false\n const errors: string[] = []\n if (!source) {\n const art = await this.sdk.ok(\n artifact(this.sdk, {\n namespace: this.namespace,\n key: model[this.keyColumn],\n })\n )\n // artifact returns an array, so get the one row this should be\n if (art.length === 1) source = this.typeRow(art[0]) as unknown as T\n }\n if (!source) {\n errors.push(`Row not found`)\n } else {\n if (source.$artifact.version !== model.$artifact.version) {\n errors.push(\n `version ${source.$artifact.version} != ${model.$artifact.version}`\n )\n }\n }\n if (errors.length > 0)\n throw new LookerSDKError(\n `${this.tableName} row ${\n model[this.keyColumn]\n } is outdated: ${errors.join()}`\n )\n return false\n }\n\n fromObject<T extends IRowModel>(obj: P[]): T[] {\n this.loadRows(obj)\n return this.rows as unknown as T[]\n }\n\n toObject(): P[] {\n return this.rows.map((r) => r.toObject() as unknown as P)\n }\n\n async batchUpdate<T extends IRowModel>(_force = false): Promise<T[]> {\n // Updates and creates are processed in the same call\n const updates = this.rows.filter(\n (r) => r.$action === RowAction.Update || r.$action === RowAction.Create\n )\n const deletes = this.rows.filter((r) => r.$action === RowAction.Delete)\n\n await this.createUpdateBatch(updates)\n await this.deleteBatch(deletes)\n return this.rows as unknown as T[]\n }\n\n getDelta<T extends IRowModel>(): IRowDelta<T> {\n const updates = this.rows.filter((r) => r.$action === RowAction.Update)\n // Sort deletions in descending row order\n const deletes = this.rows\n .filter((r) => r.$action === RowAction.Delete)\n .sort((a, b) => b._row - a._row)\n const creates = this.rows.filter((r) => r.$action === RowAction.Create)\n\n return {\n updates: updates as unknown as T[],\n deletes: deletes as unknown as T[],\n creates: creates as unknown as T[],\n }\n }\n\n mergePurge<T extends IRowModel>(\n values: SheetValues,\n delta: IRowDelta<T>\n ): SheetValues {\n delta.updates.forEach((u) => (values[u._row - 1] = this.values(u)))\n delta.deletes.forEach((d) => values.splice(d._row - 1, 1))\n delta.creates.forEach((c) => values.push(this.values(c)))\n return values\n }\n\n prepareBatch<T extends IRowModel>(\n values: SheetValues,\n delta: IRowDelta<T>,\n force?: boolean\n ): boolean {\n if (!force) {\n const errors = []\n try {\n delta.updates.forEach((u) =>\n this.checkOutdated(u, this.typeRow(values[u._row - 1]))\n )\n delta.deletes.forEach((d) =>\n this.checkOutdated(d, this.typeRow(values[d._row - 1]))\n )\n } catch (e: any) {\n errors.push(e.message)\n }\n if (errors.length > 0) throw new LookerSDKError(errors.join('\\n'))\n }\n delta.updates.forEach((u) => u.prepare())\n delta.creates.forEach((c) => c.prepare())\n return true\n }\n\n async createUpdateBatch<T extends IRowModel>(items: T[]): Promise<T[]> {\n if (items.length < 1) return Promise.resolve(this.rows as unknown as T[])\n const namespace = items[0].namespace()\n const arts: Partial<IArtifact>[] = items.map((i) => i.toArtifact())\n /** This will throw an error if the request fails */\n const result = await this.sdk.ok(\n update_artifacts(this.sdk, namespace, arts as IUpdateArtifact[])\n )\n result.forEach((r) => {\n const row: T = this.typeRow(r)\n const key = row[this.keyColumn]\n this.index[key] = row as any // TODO why is this the only thing that works?\n })\n this.updateRowsFromIndex()\n return Promise.resolve(this.rows as unknown as T[])\n }\n\n /**\n * Repopulates the row collection based exclusively on the values in the index\n * @private\n */\n private updateRowsFromIndex<T extends IRowModel>(): T[] {\n const result: any[] = []\n Object.entries(this.index).forEach(([_key, row], index) => {\n row[rowPosition] = index + 1\n result.push(row)\n })\n this.rows = result as any[] // TODO why is this the only thing that works?\n return this.rows as unknown as T[]\n }\n\n async deleteBatch<T extends IRowModel>(items: T[]): Promise<T[]> {\n if (items.length < 1) return Promise.resolve(this.rows as unknown as T[])\n const namespace = items[0].namespace()\n const keys = items.map((r) => r[this.keyColumn])\n await this.sdk.ok(delete_artifact(this.sdk, namespace, keys.join()))\n // Remove deleted items from the collections\n keys.forEach((k) => delete this.index[k])\n this.updateRowsFromIndex()\n return Promise.resolve(this.rows as unknown as T[])\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WhollyArtifact.js","names":["LookerSDKError","artifact","delete_artifact","search_artifacts","update_artifacts","RowAction","rowPosition","stringer","compareDates","a","b","getTime","TypedRows","constructor","rows","Maker","_defineProperty","map","v","add","value","push","where","predicate","from","filter","select","selector","toArray","values","create","WhollyArtifact","sdk","table","keyColumn","arguments","length","undefined","loadRows","meta","typeRow","namespace","tableName","typeRows","checkHeader","createIndex","refresh","_this","_asyncToGenerator","ok","key","concat","result","pos","forEach","r","row","toAT","rowHeader","header","join","tableHeader","nextRow","index","model","h","allValues","save","_arguments","_this2","force","$action","Delete","Update","update","None","checkId","_row","_this3","prepare","createUpdateBatch","_arguments2","_this4","_force","find","columnName","toString","displayHeader","_displayHeader","colName","displayable","delete","_arguments3","_this5","checkOutdated","deleteBatch","startsWith","source","_this6","errors","art","$artifact","version","fromObject","obj","toObject","batchUpdate","_arguments4","_this7","updates","Create","deletes","getDelta","sort","creates","mergePurge","delta","u","d","splice","c","prepareBatch","e","message","items","_this8","Promise","resolve","arts","i","toArtifact","updateRowsFromIndex","Object","entries","_ref","_key","_this9","keys","k"],"sources":["../../src/WhollyArtifact.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { IAPIMethods } from '@looker/sdk-rtl'\nimport { LookerSDKError } from '@looker/sdk-rtl'\nimport type { IArtifact, IUpdateArtifact } from '@looker/sdk'\nimport {\n artifact,\n delete_artifact,\n search_artifacts,\n update_artifacts,\n} from '@looker/sdk'\nimport type { ColumnHeaders, IRowModel, SheetValues } from './RowModel'\nimport { RowAction, rowPosition, stringer } from './RowModel'\n\n/**\n * Compare dates without running into numeric comparison problems\n * @param a first date to compare\n * @param b second date to compare\n * @returns 0 if dates are equal, positive if a > b, negative if a < b\n */\nexport const compareDates = (a: Date, b: Date) => a.getTime() - b.getTime()\n\nexport interface IMaker<T> {\n new (values?: any): T\n}\n\nexport interface IRowDelta<T extends IRowModel> {\n updates: T[]\n deletes: T[]\n creates: T[]\n}\n\n// TODO maybe get a technique from https://stackoverflow.com/a/34698946 or\n// https://www.logicbig.com/tutorials/misc/typescript/generic-constraints.html\n\n// TODO refactor WhollyArtifact<T> into something a bit cleaner\n// ref https://www.smashingmagazine.com/2020/10/understanding-typescript-generics/\nexport class TypedRows<T> {\n rows: T[] = []\n\n constructor(rows: T[], Maker?: IMaker<T>) {\n if (Maker) {\n this.rows = rows.map((v) => new Maker(v))\n } else {\n this.rows = rows\n }\n }\n\n public add(value: T): void {\n this.rows.push(value)\n }\n\n public where(predicate: (value: T) => boolean): TypedRows<T> {\n return TypedRows.from<T>(this.rows.filter(predicate))\n }\n\n public select<U>(selector: (value: T) => U): TypedRows<U> {\n return TypedRows.from<U>(this.rows.map(selector))\n }\n\n public toArray(): T[] {\n return this.rows\n }\n\n public static from<U>(values: U[]): TypedRows<U> {\n // Perhaps we perform some logic here.\n // ...\n\n return new TypedRows<U>(values)\n }\n\n public static create<U>(values?: U[]): TypedRows<U> {\n return new TypedRows<U>(values ?? [])\n }\n\n // Other collection functions.\n // ..\n}\n\nexport interface IWhollyArtifact<T extends IRowModel, P> {\n /** Any initialized Looker TypeScript SDK */\n sdk: IAPIMethods\n\n /** Namespace of this collection. Retrieved from IRowModel descendant */\n namespace: string\n\n /**\n * Name of this artifact \"table\". Used for table-level processing of the artifacts in a namespace.\n * Retrieved from IRowModel descendant\n */\n tableName: string\n\n /**\n /**\n * Header column names for reading from/writing to the sheet.\n * The order of the column names **must** match the order of the columns in the sheet.\n * The values used to read and write the sheet are always in column order position.\n */\n header: ColumnHeaders\n /** Column names to display */\n displayHeader: ColumnHeaders\n /** Name of the key column that represents the \"id\" */\n keyColumn: string\n /** All data in the sheet */\n rows: T[]\n /** Keyed row retrieval */\n index: Record<string, T>\n /** What's the next row of the sheet? */\n nextRow: number\n\n // TODO figure out init generic typing issue\n // init(values?: any): (values?: any) => T\n\n /**\n * Verify the column order in the sheet matches the key order of the row type\n * @param header array of column names in order\n */\n checkHeader(header: ColumnHeaders): boolean\n\n /**\n * True if the column name should be displayed in a UI\n *\n * False if it's an \"internal\" column name\n *\n * @param columnName to check for display\n */\n displayable(columnName: string): boolean\n\n /**\n * Gets the row's values in table.header column order\n * @param model row to introspect\n */\n values(model: T): SheetValues\n\n /**\n * Returns a 2D array of all row values based on the current rows collection.\n * The result include the header row\n */\n allValues(): SheetValues\n\n /**\n * Create a new row of this type\n * @param values either a value array or an object\n */\n typeRow<T extends IRowModel>(values?: any): T\n\n /**\n * Converts raw rows into typed rows.\n *\n * @param rows array of data to convert. Either value arrays or a collection of objects\n */\n typeRows<T extends IRowModel>(rows: SheetValues): T[]\n\n /**\n * Reload the entire tab by fetching all its values from the GSheet\n * @param values to use for refresh. If not provided, artifacts for the namespace will be searched\n */\n refresh<T extends IRowModel>(values?: any): Promise<T[]>\n\n /**\n * Save the specified row to the sheet.\n *\n * This routine determines whether to call update or create based on whether the row position is < 1\n *\n * @param model row to save\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n save<T extends IRowModel>(model: T, force?: boolean): Promise<T>\n\n /**\n * Create a row in the sheet\n *\n * If the row position is > 0 an error is thrown\n *\n * @param model row to create in sheet\n */\n create<T extends IRowModel>(model: T): Promise<T>\n\n /**\n * Update a row in the sheet\n *\n * If the row position is < 1 an error is thrown\n *\n * If the row is checkOutdated an error is thrown\n *\n * @param model row to create in sheet\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n update<T extends IRowModel>(model: T, force?: boolean): Promise<T>\n\n /**\n * Delete a row if it still exists\n * @param model to delete\n * @param force true to skip checking for outdated values. Defaults to false.\n */\n delete<T extends IRowModel>(model: T, force?: boolean): Promise<boolean>\n\n /**\n * If the row is out of date, it throws a LookerSDKError\n * @param model row for status check\n * @param source row to compare against\n */\n checkOutdated<T extends IRowModel>(model: T, source?: T): Promise<boolean>\n\n /**\n * Find the matching row. If columnName is the primary key field, indexed retrieval is used\n *\n * @param value to find\n * @param columnName in which to find the value. Defaults to primary key. If primary key, indexed retrieval is use.\n */\n find(value: any, columnName?: string): T | undefined\n\n /**\n * Reassigns collection rows, checks header, and reindexes\n * @param rows to overwrite current list\n */\n loadRows<T extends IRowModel>(rows: SheetValues): T[]\n\n /** Converts the row collection to a plain javascript object array */\n toObject(): P[]\n\n /** Assigns the passed object[] to the rows collection */\n fromObject<T extends IRowModel>(obj: P[]): T[]\n\n /** Gets the delta rows for a batch update */\n getDelta<T extends IRowModel>(): IRowDelta<T>\n\n /**\n * Processes a delta change against the tab values snapshot\n * @param tab SheetValues to update (includes header row)\n * @param delta row changes to apply\n */\n mergePurge<T extends IRowModel>(\n tab: SheetValues,\n delta: IRowDelta<T>\n ): SheetValues\n\n /**\n * Prepare a batch for processing\n *\n * If `force` is false and update rows are outdated, a LookerSDKError with outdated list is thrown\n * @param tab of sheet values to use for update checks (includes header row)\n * @param delta change to merge and purge\n * @param force prepare each row but don't worry about outdated rows\n */\n prepareBatch<T extends IRowModel>(\n tab: SheetValues,\n delta: IRowDelta<T>,\n force?: boolean\n ): boolean\n\n /**\n * collect all rows to be updated or created and submit the request\n * and returns the updated collection\n *\n * @param items list of items to update or create\n */\n createUpdateBatch<T extends IRowModel>(items: T[]): Promise<T[]>\n\n /**\n * removes all rows marked for deletion and returns the updated collection\n *\n * @param items list of items to delete\n */\n deleteBatch<T extends IRowModel>(items: T[]): Promise<T[]>\n\n /**\n * Perform a batch update by retrieving the delta for the sheet, check for outdated update rows,\n * and update the entire tab sheet with the changes\n * @param force true to skip checking for outdated update rows\n */\n batchUpdate<T extends IRowModel>(force?: boolean): Promise<T[]>\n}\n\n/**\n * Keyed data for a tab, and the tab's header row\n * TODO delete this bad boy\n */\nexport interface ITabTable {\n /** Array of header names, in column order */\n header: ColumnHeaders\n /** Parsed data for the tab */\n rows: IRowModel[]\n}\n\n/** CRUDS operations for a GSheet tab */\nexport abstract class WhollyArtifact<T extends IRowModel, P>\n extends TypedRows<T>\n implements IWhollyArtifact<T, P>\n{\n index: Record<string, T> = {}\n namespace = ''\n tableName = ''\n\n constructor(\n public readonly sdk: IAPIMethods,\n public readonly table: ITabTable,\n public readonly keyColumn: string = '_id' // TODO change to `key`\n ) {\n super([])\n this.loadRows(table.rows)\n const meta = this.typeRow()\n this.namespace = meta.namespace()\n this.tableName = meta.tableName()\n }\n\n loadRows<T extends IRowModel>(rows: SheetValues): T[] {\n this.rows = this.typeRows(rows)\n this.checkHeader()\n this.createIndex()\n return this.rows as unknown as T[]\n }\n\n async refresh<T extends IRowModel>(values?: any): Promise<T[]> {\n if (!values) {\n values = await this.sdk.ok(\n search_artifacts(this.sdk, {\n namespace: this.namespace,\n key: `${this.tableName}:%`,\n })\n )\n }\n this.rows = this.typeRows(values)\n this.createIndex()\n return this.rows as unknown as T[]\n }\n\n abstract typeRow<T extends IRowModel>(values?: any): T\n\n typeRows<T extends IRowModel>(rows: SheetValues): T[] {\n const result: T[] = []\n let pos = 1\n\n rows.forEach((r) => {\n const row: T = this.typeRow(r)\n pos++\n // fixup row position?\n if (!row[rowPosition]) row[rowPosition] = pos\n result.push(row)\n })\n\n return result\n }\n\n // // TODO figure out init generic typing issue\n // init(values?: any): T {\n // const result: T = new this.NewItem(values)\n // return result\n // }\n\n /**\n * convert value to the strong type, or undefined if not value\n * @param value to strongly type\n * @private\n */\n private static toAT<T extends IRowModel>(value: unknown): T | undefined {\n if (value) return value as T\n return undefined\n }\n\n checkHeader() {\n // Nothing to check\n if (this.rows.length === 0) return true\n const row = this.rows[0]\n const rowHeader = row.header().join()\n const tableHeader = this.table.header.join()\n if (tableHeader !== rowHeader)\n throw new LookerSDKError(\n `Expected ${this.tableName} header to be ${rowHeader} not ${tableHeader}`\n )\n return true\n }\n\n get header() {\n return this.table.header\n }\n\n get nextRow() {\n // +1 for header row\n // +1 for 1-based rows\n return this.rows.length + 2\n }\n\n private createIndex() {\n this.index = {}\n this.rows.forEach((r) => {\n this.index[r[this.keyColumn]] = r\n })\n }\n\n values<T extends IRowModel>(model: T) {\n const result: SheetValues = []\n this.header.forEach((h) => {\n result.push(stringer(model[h]))\n })\n return result\n }\n\n allValues(): SheetValues {\n const values: SheetValues = [this.header]\n values.push(...this.rows.map((r) => this.values(r)))\n return values\n }\n\n async save<T extends IRowModel>(model: T, force = false): Promise<T> {\n switch (model.$action) {\n case RowAction.Delete: {\n await this.sdk.ok(\n delete_artifact(this.sdk, this.namespace, model[this.keyColumn])\n )\n return model\n }\n case RowAction.Update: {\n return await this.update<T>(model, force)\n }\n case RowAction.None: {\n return model\n }\n }\n return (await this.create<T>(model)) as unknown as T\n }\n\n checkId<T extends IRowModel>(model: T) {\n if (!model[this.keyColumn])\n throw new LookerSDKError(\n `\"${this.keyColumn}\" must be assigned for ${this.tableName} row ${model._row}`\n )\n }\n\n async create<T extends IRowModel>(model: T): Promise<T> {\n if (model._row > 0)\n throw new LookerSDKError(\n `create needs ${this.tableName} \"${\n model[this.keyColumn]\n }\" row to be < 1, not ${model._row}`\n )\n model.prepare()\n this.checkId(model)\n await this.createUpdateBatch([model])\n return this.index[model[this.keyColumn]] as unknown as T\n }\n\n async update<T extends IRowModel>(model: T, _force = false): Promise<T> {\n if (!model._row)\n throw new LookerSDKError(\n `${this.tableName} \"${model[this.keyColumn]}\" row must be > 0 to update`\n )\n\n model.prepare()\n this.checkId(model)\n await this.createUpdateBatch([model])\n return this.index[model[this.keyColumn]] as unknown as T\n }\n\n find(value: any, columnName?: string): T | undefined {\n if (!value) return undefined\n let key = columnName || this.keyColumn\n if (typeof value === 'number') {\n // Default key to row\n if (!columnName) key = '_row'\n }\n if (columnName === this.keyColumn) {\n // Find by index\n return WhollyArtifact.toAT(this.index[value.toString()])\n }\n return WhollyArtifact.toAT(this.rows.find((r) => r[key] === value))\n }\n\n private _displayHeader: ColumnHeaders = []\n get displayHeader(): ColumnHeaders {\n if (this._displayHeader.length === 0) {\n this._displayHeader = this.header.filter((colName) =>\n this.displayable(colName)\n )\n }\n return this._displayHeader\n }\n\n async delete<T extends IRowModel>(model: T, force = false) {\n if (!force) await this.checkOutdated(model)\n await this.deleteBatch([model])\n return true\n }\n\n displayable(columnName: string): boolean {\n return !(columnName.startsWith('_') || columnName.startsWith('$'))\n }\n\n async checkOutdated<T extends IRowModel>(model: T, source?: T) {\n if (model[rowPosition] < 1) return false\n const errors: string[] = []\n if (!source) {\n const art = await this.sdk.ok(\n artifact(this.sdk, {\n namespace: this.namespace,\n key: model[this.keyColumn],\n })\n )\n // artifact returns an array, so get the one row this should be\n if (art.length === 1) source = this.typeRow(art[0]) as unknown as T\n }\n if (!source) {\n errors.push(`Row not found`)\n } else {\n if (source.$artifact.version !== model.$artifact.version) {\n errors.push(\n `version ${source.$artifact.version} != ${model.$artifact.version}`\n )\n }\n }\n if (errors.length > 0)\n throw new LookerSDKError(\n `${this.tableName} row ${\n model[this.keyColumn]\n } is outdated: ${errors.join()}`\n )\n return false\n }\n\n fromObject<T extends IRowModel>(obj: P[]): T[] {\n this.loadRows(obj)\n return this.rows as unknown as T[]\n }\n\n toObject(): P[] {\n return this.rows.map((r) => r.toObject() as unknown as P)\n }\n\n async batchUpdate<T extends IRowModel>(_force = false): Promise<T[]> {\n // Updates and creates are processed in the same call\n const updates = this.rows.filter(\n (r) => r.$action === RowAction.Update || r.$action === RowAction.Create\n )\n const deletes = this.rows.filter((r) => r.$action === RowAction.Delete)\n\n await this.createUpdateBatch(updates)\n await this.deleteBatch(deletes)\n return this.rows as unknown as T[]\n }\n\n getDelta<T extends IRowModel>(): IRowDelta<T> {\n const updates = this.rows.filter((r) => r.$action === RowAction.Update)\n // Sort deletions in descending row order\n const deletes = this.rows\n .filter((r) => r.$action === RowAction.Delete)\n .sort((a, b) => b._row - a._row)\n const creates = this.rows.filter((r) => r.$action === RowAction.Create)\n\n return {\n updates: updates as unknown as T[],\n deletes: deletes as unknown as T[],\n creates: creates as unknown as T[],\n }\n }\n\n mergePurge<T extends IRowModel>(\n values: SheetValues,\n delta: IRowDelta<T>\n ): SheetValues {\n delta.updates.forEach((u) => (values[u._row - 1] = this.values(u)))\n delta.deletes.forEach((d) => values.splice(d._row - 1, 1))\n delta.creates.forEach((c) => values.push(this.values(c)))\n return values\n }\n\n prepareBatch<T extends IRowModel>(\n values: SheetValues,\n delta: IRowDelta<T>,\n force?: boolean\n ): boolean {\n if (!force) {\n const errors = []\n try {\n delta.updates.forEach((u) =>\n this.checkOutdated(u, this.typeRow(values[u._row - 1]))\n )\n delta.deletes.forEach((d) =>\n this.checkOutdated(d, this.typeRow(values[d._row - 1]))\n )\n } catch (e: any) {\n errors.push(e.message)\n }\n if (errors.length > 0) throw new LookerSDKError(errors.join('\\n'))\n }\n delta.updates.forEach((u) => u.prepare())\n delta.creates.forEach((c) => c.prepare())\n return true\n }\n\n async createUpdateBatch<T extends IRowModel>(items: T[]): Promise<T[]> {\n if (items.length < 1) return Promise.resolve(this.rows as unknown as T[])\n const namespace = items[0].namespace()\n const arts: Partial<IArtifact>[] = items.map((i) => i.toArtifact())\n /** This will throw an error if the request fails */\n const result = await this.sdk.ok(\n update_artifacts(this.sdk, namespace, arts as IUpdateArtifact[])\n )\n result.forEach((r) => {\n const row: T = this.typeRow(r)\n const key = row[this.keyColumn]\n this.index[key] = row as any // TODO why is this the only thing that works?\n })\n this.updateRowsFromIndex()\n return Promise.resolve(this.rows as unknown as T[])\n }\n\n /**\n * Repopulates the row collection based exclusively on the values in the index\n * @private\n */\n private updateRowsFromIndex<T extends IRowModel>(): T[] {\n const result: any[] = []\n Object.entries(this.index).forEach(([_key, row], index) => {\n row[rowPosition] = index + 1\n result.push(row)\n })\n this.rows = result as any[] // TODO why is this the only thing that works?\n return this.rows as unknown as T[]\n }\n\n async deleteBatch<T extends IRowModel>(items: T[]): Promise<T[]> {\n if (items.length < 1) return Promise.resolve(this.rows as unknown as T[])\n const namespace = items[0].namespace()\n const keys = items.map((r) => r[this.keyColumn])\n await this.sdk.ok(delete_artifact(this.sdk, namespace, keys.join()))\n // Remove deleted items from the collections\n keys.forEach((k) => delete this.index[k])\n this.updateRowsFromIndex()\n return Promise.resolve(this.rows as unknown as T[])\n }\n}\n"],"mappings":";;;;;AA2BA,SAASA,cAAc,QAAQ,iBAAiB;AAEhD,SACEC,QAAQ,EACRC,eAAe,EACfC,gBAAgB,EAChBC,gBAAgB,QACX,aAAa;AAEpB,SAASC,SAAS,EAAEC,WAAW,EAAEC,QAAQ,QAAQ,YAAY;AAQ7D,OAAO,IAAMC,YAAY,GAAGA,CAACC,CAAO,EAAEC,CAAO,KAAKD,CAAC,CAACE,OAAO,CAAC,CAAC,GAAGD,CAAC,CAACC,OAAO,CAAC,CAAC;AAiB3E,OAAO,MAAMC,SAAS,CAAI;EAGxBC,WAAWA,CAACC,IAAS,EAAEC,KAAiB,EAAE;IAAAC,eAAA,eAF9B,EAAE;IAGZ,IAAID,KAAK,EAAE;MACT,IAAI,CAACD,IAAI,GAAGA,IAAI,CAACG,GAAG,CAAEC,CAAC,IAAK,IAAIH,KAAK,CAACG,CAAC,CAAC,CAAC;IAC3C,CAAC,MAAM;MACL,IAAI,CAACJ,IAAI,GAAGA,IAAI;IAClB;EACF;EAEOK,GAAGA,CAACC,KAAQ,EAAQ;IACzB,IAAI,CAACN,IAAI,CAACO,IAAI,CAACD,KAAK,CAAC;EACvB;EAEOE,KAAKA,CAACC,SAAgC,EAAgB;IAC3D,OAAOX,SAAS,CAACY,IAAI,CAAI,IAAI,CAACV,IAAI,CAACW,MAAM,CAACF,SAAS,CAAC,CAAC;EACvD;EAEOG,MAAMA,CAAIC,QAAyB,EAAgB;IACxD,OAAOf,SAAS,CAACY,IAAI,CAAI,IAAI,CAACV,IAAI,CAACG,GAAG,CAACU,QAAQ,CAAC,CAAC;EACnD;EAEOC,OAAOA,CAAA,EAAQ;IACpB,OAAO,IAAI,CAACd,IAAI;EAClB;EAEA,OAAcU,IAAIA,CAAIK,MAAW,EAAgB;IAI/C,OAAO,IAAIjB,SAAS,CAAIiB,MAAM,CAAC;EACjC;EAEA,OAAcC,MAAMA,CAAID,MAAY,EAAgB;IAClD,OAAO,IAAIjB,SAAS,CAAIiB,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,EAAE,CAAC;EACvC;AAIF;AAiNA,OAAO,MAAeE,cAAc,SAC1BnB,SAAS,CAEnB;EAKEC,WAAWA,CACOmB,GAAgB,EAChBC,KAAgB,EAEhC;IAAA,IADgBC,SAAiB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAEzC,KAAK,CAAC,EAAE,CAAC;IAAA,KAJOH,GAAgB,GAAhBA,GAAgB;IAAA,KAChBC,KAAgB,GAAhBA,KAAgB;IAAA,KAChBC,SAAiB,GAAjBA,SAAiB;IAAAlB,eAAA,gBAPR,CAAC,CAAC;IAAAA,eAAA,oBACjB,EAAE;IAAAA,eAAA,oBACF,EAAE;IAAAA,eAAA,yBAgL0B,EAAE;IAxKxC,IAAI,CAACsB,QAAQ,CAACL,KAAK,CAACnB,IAAI,CAAC;IACzB,IAAMyB,IAAI,GAAG,IAAI,CAACC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAACC,SAAS,GAAGF,IAAI,CAACE,SAAS,CAAC,CAAC;IACjC,IAAI,CAACC,SAAS,GAAGH,IAAI,CAACG,SAAS,CAAC,CAAC;EACnC;EAEAJ,QAAQA,CAAsBxB,IAAiB,EAAO;IACpD,IAAI,CAACA,IAAI,GAAG,IAAI,CAAC6B,QAAQ,CAAC7B,IAAI,CAAC;IAC/B,IAAI,CAAC8B,WAAW,CAAC,CAAC;IAClB,IAAI,CAACC,WAAW,CAAC,CAAC;IAClB,OAAO,IAAI,CAAC/B,IAAI;EAClB;EAEMgC,OAAOA,CAAsBjB,MAAY,EAAgB;IAAA,IAAAkB,KAAA;IAAA,OAAAC,iBAAA;MAC7D,IAAI,CAACnB,MAAM,EAAE;QACXA,MAAM,SAASkB,KAAI,CAACf,GAAG,CAACiB,EAAE,CACxB9C,gBAAgB,CAAC4C,KAAI,CAACf,GAAG,EAAE;UACzBS,SAAS,EAAEM,KAAI,CAACN,SAAS;UACzBS,GAAG,KAAAC,MAAA,CAAKJ,KAAI,CAACL,SAAS;QACxB,CAAC,CACH,CAAC;MACH;MACAK,KAAI,CAACjC,IAAI,GAAGiC,KAAI,CAACJ,QAAQ,CAACd,MAAM,CAAC;MACjCkB,KAAI,CAACF,WAAW,CAAC,CAAC;MAClB,OAAOE,KAAI,CAACjC,IAAI;IAAkB;EACpC;EAIA6B,QAAQA,CAAsB7B,IAAiB,EAAO;IACpD,IAAMsC,MAAW,GAAG,EAAE;IACtB,IAAIC,GAAG,GAAG,CAAC;IAEXvC,IAAI,CAACwC,OAAO,CAAEC,CAAC,IAAK;MAClB,IAAMC,GAAM,GAAG,IAAI,CAAChB,OAAO,CAACe,CAAC,CAAC;MAC9BF,GAAG,EAAE;MAEL,IAAI,CAACG,GAAG,CAAClD,WAAW,CAAC,EAAEkD,GAAG,CAAClD,WAAW,CAAC,GAAG+C,GAAG;MAC7CD,MAAM,CAAC/B,IAAI,CAACmC,GAAG,CAAC;IAClB,CAAC,CAAC;IAEF,OAAOJ,MAAM;EACf;EAaA,OAAeK,IAAIA,CAAsBrC,KAAc,EAAiB;IACtE,IAAIA,KAAK,EAAE,OAAOA,KAAK;IACvB,OAAOiB,SAAS;EAClB;EAEAO,WAAWA,CAAA,EAAG;IAEZ,IAAI,IAAI,CAAC9B,IAAI,CAACsB,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;IACvC,IAAMoB,GAAG,GAAG,IAAI,CAAC1C,IAAI,CAAC,CAAC,CAAC;IACxB,IAAM4C,SAAS,GAAGF,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC;IACrC,IAAMC,WAAW,GAAG,IAAI,CAAC5B,KAAK,CAAC0B,MAAM,CAACC,IAAI,CAAC,CAAC;IAC5C,IAAIC,WAAW,KAAKH,SAAS,EAC3B,MAAM,IAAI1D,cAAc,aAAAmD,MAAA,CACV,IAAI,CAACT,SAAS,oBAAAS,MAAA,CAAiBO,SAAS,WAAAP,MAAA,CAAQU,WAAW,CACzE,CAAC;IACH,OAAO,IAAI;EACb;EAEA,IAAIF,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAAC1B,KAAK,CAAC0B,MAAM;EAC1B;EAEA,IAAIG,OAAOA,CAAA,EAAG;IAGZ,OAAO,IAAI,CAAChD,IAAI,CAACsB,MAAM,GAAG,CAAC;EAC7B;EAEQS,WAAWA,CAAA,EAAG;IACpB,IAAI,CAACkB,KAAK,GAAG,CAAC,CAAC;IACf,IAAI,CAACjD,IAAI,CAACwC,OAAO,CAAEC,CAAC,IAAK;MACvB,IAAI,CAACQ,KAAK,CAACR,CAAC,CAAC,IAAI,CAACrB,SAAS,CAAC,CAAC,GAAGqB,CAAC;IACnC,CAAC,CAAC;EACJ;EAEA1B,MAAMA,CAAsBmC,KAAQ,EAAE;IACpC,IAAMZ,MAAmB,GAAG,EAAE;IAC9B,IAAI,CAACO,MAAM,CAACL,OAAO,CAAEW,CAAC,IAAK;MACzBb,MAAM,CAAC/B,IAAI,CAACd,QAAQ,CAACyD,KAAK,CAACC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC;IACF,OAAOb,MAAM;EACf;EAEAc,SAASA,CAAA,EAAgB;IACvB,IAAMrC,MAAmB,GAAG,CAAC,IAAI,CAAC8B,MAAM,CAAC;IACzC9B,MAAM,CAACR,IAAI,CAAC,GAAG,IAAI,CAACP,IAAI,CAACG,GAAG,CAAEsC,CAAC,IAAK,IAAI,CAAC1B,MAAM,CAAC0B,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO1B,MAAM;EACf;EAEMsC,IAAIA,CAAsBH,KAAQ,EAA6B;IAAA,IAAAI,UAAA,GAAAjC,SAAA;MAAAkC,MAAA;IAAA,OAAArB,iBAAA;MAAA,IAA3BsB,KAAK,GAAAF,UAAA,CAAAhC,MAAA,QAAAgC,UAAA,QAAA/B,SAAA,GAAA+B,UAAA,MAAG,KAAK;MACrD,QAAQJ,KAAK,CAACO,OAAO;QACnB,KAAKlE,SAAS,CAACmE,MAAM;UAAE;YACrB,MAAMH,MAAI,CAACrC,GAAG,CAACiB,EAAE,CACf/C,eAAe,CAACmE,MAAI,CAACrC,GAAG,EAAEqC,MAAI,CAAC5B,SAAS,EAAEuB,KAAK,CAACK,MAAI,CAACnC,SAAS,CAAC,CACjE,CAAC;YACD,OAAO8B,KAAK;UACd;QACA,KAAK3D,SAAS,CAACoE,MAAM;UAAE;YACrB,aAAaJ,MAAI,CAACK,MAAM,CAAIV,KAAK,EAAEM,KAAK,CAAC;UAC3C;QACA,KAAKjE,SAAS,CAACsE,IAAI;UAAE;YACnB,OAAOX,KAAK;UACd;MACF;MACA,aAAcK,MAAI,CAACvC,MAAM,CAAIkC,KAAK,CAAC;IAAiB;EACtD;EAEAY,OAAOA,CAAsBZ,KAAQ,EAAE;IACrC,IAAI,CAACA,KAAK,CAAC,IAAI,CAAC9B,SAAS,CAAC,EACxB,MAAM,IAAIlC,cAAc,MAAAmD,MAAA,CAClB,IAAI,CAACjB,SAAS,8BAAAiB,MAAA,CAA0B,IAAI,CAACT,SAAS,WAAAS,MAAA,CAAQa,KAAK,CAACa,IAAI,CAC9E,CAAC;EACL;EAEM/C,MAAMA,CAAsBkC,KAAQ,EAAc;IAAA,IAAAc,MAAA;IAAA,OAAA9B,iBAAA;MACtD,IAAIgB,KAAK,CAACa,IAAI,GAAG,CAAC,EAChB,MAAM,IAAI7E,cAAc,iBAAAmD,MAAA,CACN2B,MAAI,CAACpC,SAAS,SAAAS,MAAA,CAC5Ba,KAAK,CAACc,MAAI,CAAC5C,SAAS,CAAC,4BAAAiB,MAAA,CACCa,KAAK,CAACa,IAAI,CACpC,CAAC;MACHb,KAAK,CAACe,OAAO,CAAC,CAAC;MACfD,MAAI,CAACF,OAAO,CAACZ,KAAK,CAAC;MACnB,MAAMc,MAAI,CAACE,iBAAiB,CAAC,CAAChB,KAAK,CAAC,CAAC;MACrC,OAAOc,MAAI,CAACf,KAAK,CAACC,KAAK,CAACc,MAAI,CAAC5C,SAAS,CAAC,CAAC;IAAgB;EAC1D;EAEMwC,MAAMA,CAAsBV,KAAQ,EAA8B;IAAA,IAAAiB,WAAA,GAAA9C,SAAA;MAAA+C,MAAA;IAAA,OAAAlC,iBAAA;MAAA,IAA5BmC,MAAM,GAAAF,WAAA,CAAA7C,MAAA,QAAA6C,WAAA,QAAA5C,SAAA,GAAA4C,WAAA,MAAG,KAAK;MACxD,IAAI,CAACjB,KAAK,CAACa,IAAI,EACb,MAAM,IAAI7E,cAAc,IAAAmD,MAAA,CACnB+B,MAAI,CAACxC,SAAS,SAAAS,MAAA,CAAKa,KAAK,CAACkB,MAAI,CAAChD,SAAS,CAAC,iCAC7C,CAAC;MAEH8B,KAAK,CAACe,OAAO,CAAC,CAAC;MACfG,MAAI,CAACN,OAAO,CAACZ,KAAK,CAAC;MACnB,MAAMkB,MAAI,CAACF,iBAAiB,CAAC,CAAChB,KAAK,CAAC,CAAC;MACrC,OAAOkB,MAAI,CAACnB,KAAK,CAACC,KAAK,CAACkB,MAAI,CAAChD,SAAS,CAAC,CAAC;IAAgB;EAC1D;EAEAkD,IAAIA,CAAChE,KAAU,EAAEiE,UAAmB,EAAiB;IACnD,IAAI,CAACjE,KAAK,EAAE,OAAOiB,SAAS;IAC5B,IAAIa,GAAG,GAAGmC,UAAU,IAAI,IAAI,CAACnD,SAAS;IACtC,IAAI,OAAOd,KAAK,KAAK,QAAQ,EAAE;MAE7B,IAAI,CAACiE,UAAU,EAAEnC,GAAG,GAAG,MAAM;IAC/B;IACA,IAAImC,UAAU,KAAK,IAAI,CAACnD,SAAS,EAAE;MAEjC,OAAOH,cAAc,CAAC0B,IAAI,CAAC,IAAI,CAACM,KAAK,CAAC3C,KAAK,CAACkE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1D;IACA,OAAOvD,cAAc,CAAC0B,IAAI,CAAC,IAAI,CAAC3C,IAAI,CAACsE,IAAI,CAAE7B,CAAC,IAAKA,CAAC,CAACL,GAAG,CAAC,KAAK9B,KAAK,CAAC,CAAC;EACrE;EAGA,IAAImE,aAAaA,CAAA,EAAkB;IACjC,IAAI,IAAI,CAACC,cAAc,CAACpD,MAAM,KAAK,CAAC,EAAE;MACpC,IAAI,CAACoD,cAAc,GAAG,IAAI,CAAC7B,MAAM,CAAClC,MAAM,CAAEgE,OAAO,IAC/C,IAAI,CAACC,WAAW,CAACD,OAAO,CAC1B,CAAC;IACH;IACA,OAAO,IAAI,CAACD,cAAc;EAC5B;EAEMG,MAAMA,CAAsB3B,KAAQ,EAAiB;IAAA,IAAA4B,WAAA,GAAAzD,SAAA;MAAA0D,MAAA;IAAA,OAAA7C,iBAAA;MAAA,IAAfsB,KAAK,GAAAsB,WAAA,CAAAxD,MAAA,QAAAwD,WAAA,QAAAvD,SAAA,GAAAuD,WAAA,MAAG,KAAK;MACvD,IAAI,CAACtB,KAAK,EAAE,MAAMuB,MAAI,CAACC,aAAa,CAAC9B,KAAK,CAAC;MAC3C,MAAM6B,MAAI,CAACE,WAAW,CAAC,CAAC/B,KAAK,CAAC,CAAC;MAC/B,OAAO,IAAI;IAAA;EACb;EAEA0B,WAAWA,CAACL,UAAkB,EAAW;IACvC,OAAO,EAAEA,UAAU,CAACW,UAAU,CAAC,GAAG,CAAC,IAAIX,UAAU,CAACW,UAAU,CAAC,GAAG,CAAC,CAAC;EACpE;EAEMF,aAAaA,CAAsB9B,KAAQ,EAAEiC,MAAU,EAAE;IAAA,IAAAC,MAAA;IAAA,OAAAlD,iBAAA;MAC7D,IAAIgB,KAAK,CAAC1D,WAAW,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK;MACxC,IAAM6F,MAAgB,GAAG,EAAE;MAC3B,IAAI,CAACF,MAAM,EAAE;QACX,IAAMG,GAAG,SAASF,MAAI,CAAClE,GAAG,CAACiB,EAAE,CAC3BhD,QAAQ,CAACiG,MAAI,CAAClE,GAAG,EAAE;UACjBS,SAAS,EAAEyD,MAAI,CAACzD,SAAS;UACzBS,GAAG,EAAEc,KAAK,CAACkC,MAAI,CAAChE,SAAS;QAC3B,CAAC,CACH,CAAC;QAED,IAAIkE,GAAG,CAAChE,MAAM,KAAK,CAAC,EAAE6D,MAAM,GAAGC,MAAI,CAAC1D,OAAO,CAAC4D,GAAG,CAAC,CAAC,CAAC,CAAiB;MACrE;MACA,IAAI,CAACH,MAAM,EAAE;QACXE,MAAM,CAAC9E,IAAI,gBAAgB,CAAC;MAC9B,CAAC,MAAM;QACL,IAAI4E,MAAM,CAACI,SAAS,CAACC,OAAO,KAAKtC,KAAK,CAACqC,SAAS,CAACC,OAAO,EAAE;UACxDH,MAAM,CAAC9E,IAAI,YAAA8B,MAAA,CACE8C,MAAM,CAACI,SAAS,CAACC,OAAO,UAAAnD,MAAA,CAAOa,KAAK,CAACqC,SAAS,CAACC,OAAO,CACnE,CAAC;QACH;MACF;MACA,IAAIH,MAAM,CAAC/D,MAAM,GAAG,CAAC,EACnB,MAAM,IAAIpC,cAAc,IAAAmD,MAAA,CACnB+C,MAAI,CAACxD,SAAS,WAAAS,MAAA,CACfa,KAAK,CAACkC,MAAI,CAAChE,SAAS,CAAC,oBAAAiB,MAAA,CACNgD,MAAM,CAACvC,IAAI,CAAC,CAAC,CAChC,CAAC;MACH,OAAO,KAAK;IAAA;EACd;EAEA2C,UAAUA,CAAsBC,GAAQ,EAAO;IAC7C,IAAI,CAAClE,QAAQ,CAACkE,GAAG,CAAC;IAClB,OAAO,IAAI,CAAC1F,IAAI;EAClB;EAEA2F,QAAQA,CAAA,EAAQ;IACd,OAAO,IAAI,CAAC3F,IAAI,CAACG,GAAG,CAAEsC,CAAC,IAAKA,CAAC,CAACkD,QAAQ,CAAC,CAAiB,CAAC;EAC3D;EAEMC,WAAWA,CAAA,EAAoD;IAAA,IAAAC,WAAA,GAAAxE,SAAA;MAAAyE,MAAA;IAAA,OAAA5D,iBAAA;MAAA,IAA9BmC,MAAM,GAAAwB,WAAA,CAAAvE,MAAA,QAAAuE,WAAA,QAAAtE,SAAA,GAAAsE,WAAA,MAAG,KAAK;MAEnD,IAAME,OAAO,GAAGD,MAAI,CAAC9F,IAAI,CAACW,MAAM,CAC7B8B,CAAC,IAAKA,CAAC,CAACgB,OAAO,KAAKlE,SAAS,CAACoE,MAAM,IAAIlB,CAAC,CAACgB,OAAO,KAAKlE,SAAS,CAACyG,MACnE,CAAC;MACD,IAAMC,OAAO,GAAGH,MAAI,CAAC9F,IAAI,CAACW,MAAM,CAAE8B,CAAC,IAAKA,CAAC,CAACgB,OAAO,KAAKlE,SAAS,CAACmE,MAAM,CAAC;MAEvE,MAAMoC,MAAI,CAAC5B,iBAAiB,CAAC6B,OAAO,CAAC;MACrC,MAAMD,MAAI,CAACb,WAAW,CAACgB,OAAO,CAAC;MAC/B,OAAOH,MAAI,CAAC9F,IAAI;IAAkB;EACpC;EAEAkG,QAAQA,CAAA,EAAsC;IAC5C,IAAMH,OAAO,GAAG,IAAI,CAAC/F,IAAI,CAACW,MAAM,CAAE8B,CAAC,IAAKA,CAAC,CAACgB,OAAO,KAAKlE,SAAS,CAACoE,MAAM,CAAC;IAEvE,IAAMsC,OAAO,GAAG,IAAI,CAACjG,IAAI,CACtBW,MAAM,CAAE8B,CAAC,IAAKA,CAAC,CAACgB,OAAO,KAAKlE,SAAS,CAACmE,MAAM,CAAC,CAC7CyC,IAAI,CAAC,CAACxG,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACmE,IAAI,GAAGpE,CAAC,CAACoE,IAAI,CAAC;IAClC,IAAMqC,OAAO,GAAG,IAAI,CAACpG,IAAI,CAACW,MAAM,CAAE8B,CAAC,IAAKA,CAAC,CAACgB,OAAO,KAAKlE,SAAS,CAACyG,MAAM,CAAC;IAEvE,OAAO;MACLD,OAAO,EAAEA,OAAyB;MAClCE,OAAO,EAAEA,OAAyB;MAClCG,OAAO,EAAEA;IACX,CAAC;EACH;EAEAC,UAAUA,CACRtF,MAAmB,EACnBuF,KAAmB,EACN;IACbA,KAAK,CAACP,OAAO,CAACvD,OAAO,CAAE+D,CAAC,IAAMxF,MAAM,CAACwF,CAAC,CAACxC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAChD,MAAM,CAACwF,CAAC,CAAE,CAAC;IACnED,KAAK,CAACL,OAAO,CAACzD,OAAO,CAAEgE,CAAC,IAAKzF,MAAM,CAAC0F,MAAM,CAACD,CAAC,CAACzC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1DuC,KAAK,CAACF,OAAO,CAAC5D,OAAO,CAAEkE,CAAC,IAAK3F,MAAM,CAACR,IAAI,CAAC,IAAI,CAACQ,MAAM,CAAC2F,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO3F,MAAM;EACf;EAEA4F,YAAYA,CACV5F,MAAmB,EACnBuF,KAAmB,EACnB9C,KAAe,EACN;IACT,IAAI,CAACA,KAAK,EAAE;MACV,IAAM6B,MAAM,GAAG,EAAE;MACjB,IAAI;QACFiB,KAAK,CAACP,OAAO,CAACvD,OAAO,CAAE+D,CAAC,IACtB,IAAI,CAACvB,aAAa,CAACuB,CAAC,EAAE,IAAI,CAAC7E,OAAO,CAACX,MAAM,CAACwF,CAAC,CAACxC,IAAI,GAAG,CAAC,CAAC,CAAC,CACxD,CAAC;QACDuC,KAAK,CAACL,OAAO,CAACzD,OAAO,CAAEgE,CAAC,IACtB,IAAI,CAACxB,aAAa,CAACwB,CAAC,EAAE,IAAI,CAAC9E,OAAO,CAACX,MAAM,CAACyF,CAAC,CAACzC,IAAI,GAAG,CAAC,CAAC,CAAC,CACxD,CAAC;MACH,CAAC,CAAC,OAAO6C,CAAM,EAAE;QACfvB,MAAM,CAAC9E,IAAI,CAACqG,CAAC,CAACC,OAAO,CAAC;MACxB;MACA,IAAIxB,MAAM,CAAC/D,MAAM,GAAG,CAAC,EAAE,MAAM,IAAIpC,cAAc,CAACmG,MAAM,CAACvC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE;IACAwD,KAAK,CAACP,OAAO,CAACvD,OAAO,CAAE+D,CAAC,IAAKA,CAAC,CAACtC,OAAO,CAAC,CAAC,CAAC;IACzCqC,KAAK,CAACF,OAAO,CAAC5D,OAAO,CAAEkE,CAAC,IAAKA,CAAC,CAACzC,OAAO,CAAC,CAAC,CAAC;IACzC,OAAO,IAAI;EACb;EAEMC,iBAAiBA,CAAsB4C,KAAU,EAAgB;IAAA,IAAAC,MAAA;IAAA,OAAA7E,iBAAA;MACrE,IAAI4E,KAAK,CAACxF,MAAM,GAAG,CAAC,EAAE,OAAO0F,OAAO,CAACC,OAAO,CAACF,MAAI,CAAC/G,IAAsB,CAAC;MACzE,IAAM2B,SAAS,GAAGmF,KAAK,CAAC,CAAC,CAAC,CAACnF,SAAS,CAAC,CAAC;MACtC,IAAMuF,IAA0B,GAAGJ,KAAK,CAAC3G,GAAG,CAAEgH,CAAC,IAAKA,CAAC,CAACC,UAAU,CAAC,CAAC,CAAC;MAEnE,IAAM9E,MAAM,SAASyE,MAAI,CAAC7F,GAAG,CAACiB,EAAE,CAC9B7C,gBAAgB,CAACyH,MAAI,CAAC7F,GAAG,EAAES,SAAS,EAAEuF,IAAyB,CACjE,CAAC;MACD5E,MAAM,CAACE,OAAO,CAAEC,CAAC,IAAK;QACpB,IAAMC,GAAM,GAAGqE,MAAI,CAACrF,OAAO,CAACe,CAAC,CAAC;QAC9B,IAAML,GAAG,GAAGM,GAAG,CAACqE,MAAI,CAAC3F,SAAS,CAAC;QAC/B2F,MAAI,CAAC9D,KAAK,CAACb,GAAG,CAAC,GAAGM,GAAU;MAC9B,CAAC,CAAC;MACFqE,MAAI,CAACM,mBAAmB,CAAC,CAAC;MAC1B,OAAOL,OAAO,CAACC,OAAO,CAACF,MAAI,CAAC/G,IAAsB,CAAC;IAAA;EACrD;EAMQqH,mBAAmBA,CAAA,EAA6B;IACtD,IAAM/E,MAAa,GAAG,EAAE;IACxBgF,MAAM,CAACC,OAAO,CAAC,IAAI,CAACtE,KAAK,CAAC,CAACT,OAAO,CAAC,CAAAgF,IAAA,EAAcvE,KAAK,KAAK;MAAA,IAAvB,CAACwE,IAAI,EAAE/E,GAAG,CAAC,GAAA8E,IAAA;MAC7C9E,GAAG,CAAClD,WAAW,CAAC,GAAGyD,KAAK,GAAG,CAAC;MAC5BX,MAAM,CAAC/B,IAAI,CAACmC,GAAG,CAAC;IAClB,CAAC,CAAC;IACF,IAAI,CAAC1C,IAAI,GAAGsC,MAAe;IAC3B,OAAO,IAAI,CAACtC,IAAI;EAClB;EAEMiF,WAAWA,CAAsB6B,KAAU,EAAgB;IAAA,IAAAY,MAAA;IAAA,OAAAxF,iBAAA;MAC/D,IAAI4E,KAAK,CAACxF,MAAM,GAAG,CAAC,EAAE,OAAO0F,OAAO,CAACC,OAAO,CAACS,MAAI,CAAC1H,IAAsB,CAAC;MACzE,IAAM2B,SAAS,GAAGmF,KAAK,CAAC,CAAC,CAAC,CAACnF,SAAS,CAAC,CAAC;MACtC,IAAMgG,IAAI,GAAGb,KAAK,CAAC3G,GAAG,CAAEsC,CAAC,IAAKA,CAAC,CAACiF,MAAI,CAACtG,SAAS,CAAC,CAAC;MAChD,MAAMsG,MAAI,CAACxG,GAAG,CAACiB,EAAE,CAAC/C,eAAe,CAACsI,MAAI,CAACxG,GAAG,EAAES,SAAS,EAAEgG,IAAI,CAAC7E,IAAI,CAAC,CAAC,CAAC,CAAC;MAEpE6E,IAAI,CAACnF,OAAO,CAAEoF,CAAC,IAAK,OAAOF,MAAI,CAACzE,KAAK,CAAC2E,CAAC,CAAC,CAAC;MACzCF,MAAI,CAACL,mBAAmB,CAAC,CAAC;MAC1B,OAAOL,OAAO,CAACC,OAAO,CAACS,MAAI,CAAC1H,IAAsB,CAAC;IAAA;EACrD;AACF"}
|
package/lib/esm/index.js
CHANGED
|
@@ -1,28 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
var _RowModel = require("./RowModel");
|
|
7
|
-
Object.keys(_RowModel).forEach(function (key) {
|
|
8
|
-
if (key === "default" || key === "__esModule") return;
|
|
9
|
-
if (key in exports && exports[key] === _RowModel[key]) return;
|
|
10
|
-
Object.defineProperty(exports, key, {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function get() {
|
|
13
|
-
return _RowModel[key];
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
var _WhollyArtifact = require("./WhollyArtifact");
|
|
18
|
-
Object.keys(_WhollyArtifact).forEach(function (key) {
|
|
19
|
-
if (key === "default" || key === "__esModule") return;
|
|
20
|
-
if (key in exports && exports[key] === _WhollyArtifact[key]) return;
|
|
21
|
-
Object.defineProperty(exports, key, {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
get: function get() {
|
|
24
|
-
return _WhollyArtifact[key];
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
});
|
|
1
|
+
export * from './RowModel';
|
|
2
|
+
export * from './WhollyArtifact';
|
|
28
3
|
//# sourceMappingURL=index.js.map
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2022 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nexport * from './RowModel'\nexport * from './WhollyArtifact'\n"],"mappings":"AA0BA,cAAc,YAAY;AAC1B,cAAc,kBAAkB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@looker/wholly-artifact",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "Looker Artifact API as a Table SDK",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
},
|
|
38
38
|
"homepage": "https://github.com/looker-open-source/sdk-codegen/tree/main/packages/wholly-artifact",
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@looker/sdk-node": "23.
|
|
40
|
+
"@looker/sdk-node": "23.18.0",
|
|
41
41
|
"@types/uuid": "^8.3.4"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@looker/sdk": "23.
|
|
44
|
+
"@looker/sdk": "23.18.0",
|
|
45
45
|
"@looker/sdk-rtl": "21.6.1",
|
|
46
46
|
"lodash": "^4.17.21",
|
|
47
47
|
"uuid": "^9.0.0"
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"API",
|
|
53
53
|
"SDK"
|
|
54
54
|
],
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "008b8386e4019bb33465e513c022a929282b30d1"
|
|
56
56
|
}
|