@looker/wholly-artifact 0.1.42 → 0.1.44
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 +17 -0
- package/lib/RowModel.js +4 -4
- package/lib/RowModel.js.map +1 -1
- package/lib/WhollyArtifact.js +4 -4
- package/lib/WhollyArtifact.js.map +1 -1
- package/lib/esm/RowModel.js +3 -3
- package/lib/esm/RowModel.js.map +1 -1
- package/lib/esm/WhollyArtifact.js +4 -4
- package/lib/esm/WhollyArtifact.js.map +1 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -303,6 +303,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
303
303
|
* devDependencies
|
|
304
304
|
* @looker/sdk-node bumped from 26.4.0 to 26.6.0
|
|
305
305
|
|
|
306
|
+
### Dependencies
|
|
307
|
+
|
|
308
|
+
* The following workspace dependencies were updated
|
|
309
|
+
* dependencies
|
|
310
|
+
* @looker/sdk-rtl bumped from 21.6.4 to 21.6.5
|
|
311
|
+
* @looker/sdk bumped from 26.6.0 to 26.6.1
|
|
312
|
+
* devDependencies
|
|
313
|
+
* @looker/sdk-node bumped from 26.6.0 to 26.6.1
|
|
314
|
+
|
|
315
|
+
### Dependencies
|
|
316
|
+
|
|
317
|
+
* The following workspace dependencies were updated
|
|
318
|
+
* dependencies
|
|
319
|
+
* @looker/sdk bumped from 26.6.1 to 26.8.0
|
|
320
|
+
* devDependencies
|
|
321
|
+
* @looker/sdk-node bumped from 26.6.1 to 26.8.0
|
|
322
|
+
|
|
306
323
|
## [0.1.41](https://github.com/looker-open-source/sdk-codegen/compare/wholly-artifact-v0.1.40...wholly-artifact-v0.1.41) (2026-03-11)
|
|
307
324
|
|
|
308
325
|
|
package/lib/RowModel.js
CHANGED
|
@@ -7,11 +7,11 @@ exports.stringer = exports.rowPosition = exports.noDate = exports.nilCell = expo
|
|
|
7
7
|
var _uuid = require("uuid");
|
|
8
8
|
var _sdkRtl = require("@looker/sdk-rtl");
|
|
9
9
|
var _omit = _interopRequireDefault(require("lodash/omit"));
|
|
10
|
-
function _interopRequireDefault(
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
11
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
12
12
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
13
|
-
function _defineProperty(
|
|
14
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i :
|
|
13
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
14
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
15
15
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
16
16
|
var noDate = exports.noDate = new Date(-8640000000000000);
|
|
17
17
|
var APP_JSON = exports.APP_JSON = 'application/json';
|
|
@@ -76,7 +76,7 @@ class RowModel {
|
|
|
76
76
|
initValues(values) {
|
|
77
77
|
if (this.initFromArray(values)) return;
|
|
78
78
|
if (typeof values === 'object' && values !== null && values !== undefined) {
|
|
79
|
-
var nested =
|
|
79
|
+
var nested = 'value' in values;
|
|
80
80
|
var _value = nested ? values.value : values;
|
|
81
81
|
if (nested) {
|
|
82
82
|
this.$artifact = values;
|
package/lib/RowModel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowModel.js","names":["_uuid","require","_sdkRtl","_omit","_interopRequireDefault","obj","__esModule","default","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","value","_toPropertyKey","configurable","writable","i","_toPrimitive","String","Symbol","toPrimitive","call","TypeError","Number","noDate","exports","Date","APP_JSON","nilCell","addMinutes","date","minutes","getTime","stringer","undefined","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","_values$$artifact","_values$$artifact$con","content_type","localeCompare","sensitivity","LookerSDKError","concat","k","v","decodeURI","tableName","name","uuidv4","_id","oops","message","$action","Delete","Update","setCreate","setUpdate","setDelete","result","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 { LookerSDKError, boolDefault } 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\n// noinspection TypeScriptValidateTypes\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 as any)[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 const v = this.typeCast(k, value[k]);\n (this as any)[k] = typeof v === 'string' ? decodeURI(v) : v;\n });\n if (values.key) (this as any).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 as any)[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 as any)[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 as any)[key] instanceof Date) {\n if (value) return new Date(value);\n return noDate;\n }\n if (Array.isArray((this as any)[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: any = {};\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 v: any = (this as any)[key];\n const val = typeof v === 'string' ? encodeURI(v) : v;\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","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","noDate","exports","Date","APP_JSON","nilCell","addMinutes","date","minutes","getTime","stringer","undefined","toISOString","toString","rowPosition","RowAction","RowModel","constructor","values","version","None","initValues","key","makey","$_action","Create","isNew","$artifact","isStored","initFromArray","Array","isArray","header","val","index","typeCast","nested","JSON","parse","_values$$artifact","_values$$artifact$con","content_type","localeCompare","sensitivity","LookerSDKError","concat","k","v","decodeURI","tableName","name","uuidv4","_id","oops","message","$action","Delete","Update","setCreate","setUpdate","setDelete","result","startsWith","hide","has","displayHeader","prepare","_updated","type","fromType","isInt","match","parseInt","parseFloat","boolDefault","split","assign","validate","toObject","omit","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 { LookerSDKError, boolDefault } 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\n// noinspection TypeScriptValidateTypes\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 as any)[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 const v = this.typeCast(k, value[k]);\n (this as any)[k] = typeof v === 'string' ? decodeURI(v) : v;\n });\n if (values.key) (this as any).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 as any)[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 as any)[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 as any)[key] instanceof Date) {\n if (value) return new Date(value);\n return noDate;\n }\n if (Array.isArray((this as any)[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: any = {};\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 v: any = (this as any)[key];\n const val = typeof v === 'string' ? encodeURI(v) : v;\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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","ignoreList":[]}
|
package/lib/WhollyArtifact.js
CHANGED
|
@@ -7,10 +7,10 @@ exports.compareDates = exports.WhollyArtifact = exports.TypedRows = void 0;
|
|
|
7
7
|
var _sdkRtl = require("@looker/sdk-rtl");
|
|
8
8
|
var _sdk = require("@looker/sdk");
|
|
9
9
|
var _RowModel = require("./RowModel");
|
|
10
|
-
function asyncGeneratorStep(
|
|
11
|
-
function _asyncToGenerator(
|
|
12
|
-
function _defineProperty(
|
|
13
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i :
|
|
10
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
11
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
12
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
13
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
14
14
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
15
15
|
var compareDates = (a, b) => a.getTime() - b.getTime();
|
|
16
16
|
exports.compareDates = compareDates;
|
|
@@ -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","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","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","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","message","items","_this8","arts","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","n","t","e","r","o","a","c","i","u","value","done","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_defineProperty","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","compareDates","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","undefined","loadRows","meta","typeRow","namespace","tableName","typeRows","checkHeader","createIndex","refresh","_this","ok","search_artifacts","key","concat","result","pos","forEach","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","obj","toObject","batchUpdate","_arguments4","_this7","updates","Create","deletes","getDelta","sort","creates","mergePurge","delta","d","splice","prepareBatch","message","items","_this8","arts","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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","ignoreList":[]}
|
package/lib/esm/RowModel.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
2
2
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
3
|
-
function _defineProperty(
|
|
4
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i :
|
|
3
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
4
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
5
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
6
6
|
import { v4 as uuidv4 } from 'uuid';
|
|
7
7
|
import { LookerSDKError, boolDefault } from '@looker/sdk-rtl';
|
|
@@ -67,7 +67,7 @@ export class RowModel {
|
|
|
67
67
|
initValues(values) {
|
|
68
68
|
if (this.initFromArray(values)) return;
|
|
69
69
|
if (typeof values === 'object' && values !== null && values !== undefined) {
|
|
70
|
-
var nested =
|
|
70
|
+
var nested = 'value' in values;
|
|
71
71
|
var _value = nested ? values.value : values;
|
|
72
72
|
if (nested) {
|
|
73
73
|
this.$artifact = values;
|
package/lib/esm/RowModel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowModel.js","names":["v4","uuidv4","LookerSDKError","boolDefault","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","v","decodeURI","tableName","name","_id","oops","message","$action","Delete","Update","setCreate","setUpdate","setDelete","result","filter","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 { LookerSDKError, boolDefault } 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\n// noinspection TypeScriptValidateTypes\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 as any)[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 const v = this.typeCast(k, value[k]);\n (this as any)[k] = typeof v === 'string' ? decodeURI(v) : v;\n });\n if (values.key) (this as any).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 as any)[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 as any)[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 as any)[key] instanceof Date) {\n if (value) return new Date(value);\n return noDate;\n }\n if (Array.isArray((this as any)[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: any = {};\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 v: any = (this as any)[key];\n const val = typeof v === 'string' ? encodeURI(v) : v;\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","LookerSDKError","boolDefault","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","v","decodeURI","tableName","name","_id","oops","message","$action","Delete","Update","setCreate","setUpdate","setDelete","result","filter","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 { LookerSDKError, boolDefault } 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\n// noinspection TypeScriptValidateTypes\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 as any)[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 const v = this.typeCast(k, value[k]);\n (this as any)[k] = typeof v === 'string' ? decodeURI(v) : v;\n });\n if (values.key) (this as any).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 as any)[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 as any)[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 as any)[key] instanceof Date) {\n if (value) return new Date(value);\n return noDate;\n }\n if (Array.isArray((this as any)[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: any = {};\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 v: any = (this as any)[key];\n const val = typeof v === 'string' ? encodeURI(v) : v;\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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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
function asyncGeneratorStep(
|
|
2
|
-
function _asyncToGenerator(
|
|
3
|
-
function _defineProperty(
|
|
4
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i :
|
|
1
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
2
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
3
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
4
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
5
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
6
6
|
import { LookerSDKError } from '@looker/sdk-rtl';
|
|
7
7
|
import { artifact, delete_artifact, search_artifacts, update_artifacts } from '@looker/sdk';
|
|
@@ -1 +1 @@
|
|
|
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":"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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":"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","ignoreList":[]}
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"}
|
|
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","ignoreList":[]}
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_RowModel","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_WhollyArtifact"],"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,IAAAA,SAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,SAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,SAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAT,SAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,eAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,eAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,eAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAC,eAAA,CAAAL,GAAA;IAAA;EAAA;AAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_RowModel","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_WhollyArtifact"],"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,IAAAA,SAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,SAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,SAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAT,SAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,eAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,eAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,eAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAC,eAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@looker/wholly-artifact",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.44",
|
|
4
4
|
"description": "Looker Artifact API as a Table SDK",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -37,12 +37,12 @@
|
|
|
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": "26.
|
|
40
|
+
"@looker/sdk-node": "26.8.0",
|
|
41
41
|
"@types/uuid": "^8.3.4"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@looker/sdk": "26.
|
|
45
|
-
"@looker/sdk-rtl": "21.6.
|
|
44
|
+
"@looker/sdk": "26.8.0",
|
|
45
|
+
"@looker/sdk-rtl": "21.6.5",
|
|
46
46
|
"lodash": "4.17.21",
|
|
47
47
|
"uuid": "9.0.1"
|
|
48
48
|
},
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"API",
|
|
53
53
|
"SDK"
|
|
54
54
|
],
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "2eef678cbe8af38ea6070b08e80895df7c5f5ee0"
|
|
56
56
|
}
|