UNPKG

11 kBPlain TextView Raw
1{"code":"function defineName$__(cls,name){\n\tObject.defineProperty(cls,\"name\",{value:name,configurable:true});\n};;\nfunction inheritClass$__(cls){\n\tObject.getPrototypeOf(cls.prototype).constructor?.inherited?.(cls);\n};;\nfunction extend$__(target,ext){\n\t// @ts-ignore\n\tconst descriptors = Object.getOwnPropertyDescriptors(ext);\n\tdelete descriptors.constructor;\n\tif(target.extend__ instanceof Function){\n\t\ttarget.extend__(descriptors,ext);\n\t} else {\n\t\t// @ts-ignore\n\t\tObject.defineProperties(target,descriptors);\n\t}\n\treturn target;\n};\nimport {observable as imba_observable} from 'imba';\nconst $setup$ = Symbol.for('#setup'), $__init__$ = Symbol.for('#__init__'), $__patch__$ = Symbol.for('#__patch__'), $__initor__$ = Symbol.for('#__initor__'), $__inited__$ = Symbol.for('#__inited__'), $__hooks__$ = Symbol.for('#__hooks__');\nvar $1 = Symbol(), $2 = Symbol();\n\n/*body*/\nimport './any';\nimport {Iterable,Index} from '../core/iterable';\n\n// @template [Type=any]\nexport class OPBacklinkField extends OPField {\n\t[$__patch__$]($$ = {},fields = true){\n\t\tvar $3;\n\t\tsuper[$__patch__$] && super[$__patch__$]($$,fields);\n\t\t($3 = $$.pgtype) !== undefined && (this.pgtype = $3);\n\t\t($3 = $$.generated) !== undefined && (this.generated = $3);\n\t\t($3 = $$.virtual) !== undefined && (this.virtual = $3);\n\t\t($3 = $$.children) !== undefined && (this.children = $3);\n\t\t\n\t}\n\tconstructor(){\n\t\tsuper(...arguments);\n\t\tsuper[$__init__$] || this[$__init__$]();this[$__initor__$]===$1 && (this[$__hooks__$]&&this[$__hooks__$].inited(this),this[$__inited__$] && this[$__inited__$]());\n\t}\n\t[$__init__$]($$ = null,deep = true,fields = true){\n\t\tvar $4;\n\t\tdeep && super[$__init__$] && super[$__init__$](...arguments);\n\t\tthis.pgtype = ($$ && ($4 = $$.pgtype) !== undefined) ? ($4) : '';\n\t\tthis.generated = ($$ && ($4 = $$.generated) !== undefined) ? ($4) : true;\n\t\tthis.virtual = ($$ && ($4 = $$.virtual) !== undefined) ? ($4) : true;\n\t\tthis.children = ($$ && ($4 = $$.children) !== undefined) ? ($4) : false;\n\t\t\n\t}\n\t$get(target){\n\t\t\n\t\treturn target[this.key] ||= new Backlink(target,this,...this.args);\n\t}\n\t\n\t$load(value,target){\n\t\t\n\t\tif (value !== undefined) { this.$get(target).patch(value) };\n\t\treturn;\n\t}\n\t\n\ttest(item,target){\n\t\t\n\t\tif (this.type) {\n\t\t\t\n\t\t\t// should be possible to test just the type itself\n\t\t\treturn item instanceof this.type;\n\t\t};\n\t}\n\t\n\t[$setup$](){\n\t\t\n\t\t\n\t\t// could have many types?\n\t\t// TODO would love a custom object type for the field shapes\n\t\t// delay this type of setup as long as possible.\n\t\tif (this.type && this.children) {\n\t\t\t\n\t\t\tfor (let $7 = this.type.shape, $5 = 0, $6 = Object.keys($7), $8 = $6.length, n, f; $5 < $8; $5++){\n\t\t\t\tn = $6[$5];f = $7[n];\n\t\t\t\t\n\t\t\t\t// plan is no longer to map parent/children fields directly?\n\t\t\t\tif (f.parent && f.type == this.model) {\n\t\t\t\t\t\n\t\t\t\t\tf.$backlinked(this);\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t\t\n\t\treturn this;\n\t}\n\tstatic {\n\t\tthis.prototype[$__initor__$] = $1;defineName$__(this,'OPBacklinkField');inheritClass$__(this);}\n}; globalThis.OPBacklinkField = OPBacklinkField;\n\nexport class Backlink extends Index {\n\t\n\tstatic get [Symbol.species](){\n\t\t\n\t\treturn Iterable;\n\t}\n\t\n\t// TODO follow the EmbedObject style with owner/field\n\tconstructor(owner,field,typ,key){\n\t\t\n\t\tsuper(owner,field);\n\t\tthis.owner = owner;\n\t\tthis.field = field;\n\t\timba_observable(this);\n\t\t\n\t\tif (typ && key) {\n\t\t\t\n\t\t\t\n\t\t\tthis.load = function(_0,_1) { return typ.from(_0,owner).sys.patch({[key]: _1}); };\n\t\t};this[$__initor__$]===$2 && (this[$__hooks__$]&&this[$__hooks__$].inited(this),this[$__inited__$] && this[$__inited__$]());\n\t}\n\t\n\treadableΞfor(user){\n\t\t\n\t\tlet roles = this.owner.rolesΞfor(user);\n\t\treturn true;\n\t}\n\t\n\tadd(item){\n\t\t\n\t\tif (this.indexOf(item) < 0) { this.push(item) };\n\t\treturn this;\n\t}\n\t\n\tdelete(item){\n\t\t\n\t\tlet idx = this.indexOf(item);\n\t\tif (idx >= 0) { this.splice(idx,1) };\n\t\treturn this;\n\t}\n\t\n\tget id(){\n\t\t\n\t\t// what if it is a pov prop?\n\t\treturn (\"\" + (this.owner.id) + \"_\" + this.field.name.toUpperCase());\n\t}\n\t\n\tload(key,value){\n\t\t\n\t\tconsole.log('Backlink load');\n\t\treturn this;\n\t}\n\t\n\tpatch(data){\n\t\t\n\t\tconsole.log('patching backlink!',data);\n\t\tif (this.plain) {\n\t\t\t\n\t\t\tfor (let $9 = 0, $10 = Object.keys(data), $11 = $10.length, k, v; $9 < $11; $9++){\n\t\t\t\tk = $10[$9];v = data[k];\n\t\t\t\tlet v0 = this.plain[k];\n\t\t\t\tif (v0 !== v) {\n\t\t\t\t\t\n\t\t\t\t\tthis.load(k,v);\n\t\t\t\t\tthis.plain[k] = v;\n\t\t\t\t};\n\t\t\t};\n\t\t} else {\n\t\t\t\n\t\t\tthis.plain = data;\n\t\t\tfor (let $12 = 0, $13 = Object.keys(data), $14 = $13.length, k, v; $12 < $14; $12++){\n\t\t\t\tk = $13[$12];v = data[k];\n\t\t\t\tconsole.log('loading backlink',k,v);\n\t\t\t\tthis.load(k,v);\n\t\t\t};\n\t\t};\n\t\t\n\t\treturn this;\n\t}\n\t// def only filter\n\t// new Models(self,filter)\n\t// # new Collection(sources: self,filters: filters)\n\t\n\tstatic {\n\t\tthis.prototype[$__initor__$] = $2;defineName$__(this,'Backlink');inheritClass$__(this);}\n};\n\nclass ΩOPObject {\n\t\n\t// @template [T=any]\n\t/**\n\t@param {T} type\n\t@returns { BacklinkField<T> }\n\t*/\n\tαbacklink(type){\n\t\t\n\t\treturn new OPBacklinkField(type);\n\t}\n\tstatic {\n\t\tdefineName$__(this,'OPObject');}\n};\nextend$__(OPObject.prototype,ΩOPObject.prototype);\n;\n","map":{"version":3,"file":"backlink.js","sourceRoot":"","sources":["/Users/abdellah/workspace/scrimba/op/src/fields/backlink.imba"],"sourcesContent":["import './any'\nimport {Iterable, Index} from '../core/iterable'\n\n# @template [Type=any]\nexport global class OPBacklinkField < OPField\n\tpgtype = ''\n\n\tgenerated = yes\n\n\tvirtual = yes\n\n\tchildren = no\n\n\tdef $get target\n\t\ttarget[key] ||= new Backlink(target,self,...args)\n\n\tdef $load value, target\n\t\tself.$get(target).patch(value) unless value === undefined\n\t\treturn\n\n\tdef test item, target\n\t\tif type\n\t\t\t# should be possible to test just the type itself\n\t\t\treturn item isa type\n\n\tdef #setup\n\n\t\t# could have many types?\n\t\t# TODO would love a custom object type for the field shapes\n\t\t# delay this type of setup as long as possible.\n\t\tif type and children\n\t\t\tfor own n,f of type.shape\n\n\t\t\t\t# plan is no longer to map parent/children fields directly?\n\t\t\t\tif f.parent and f.type == model\n\t\t\t\t\tf.$backlinked(self)\n\n\t\tself\n\nexport class Backlink < Index\n\tstatic get [Symbol.species]\n\t\tIterable\n\n\t# TODO follow the EmbedObject style with owner/field\n\tdef constructor owner,field,typ,key\n\t\tsuper(owner,field)\n\t\towner = owner\n\t\tfield = field\n\t\timba.observable(self)\n\n\t\tif typ and key\n\n\t\t\tload = do typ.from($1,owner).sys.patch({[key]: $2})\n\n\tdef readable-for user\n\t\tlet roles = owner.roles-for(user)\n\t\tyes\n\n\tdef add item\n\t\tpush(item) unless indexOf(item) >= 0\n\t\treturn self\n\n\tdef delete item\n\t\tlet idx = indexOf(item)\n\t\tsplice(idx,1) if idx >= 0\n\t\treturn self\n\n\tget id\n\t\t# what if it is a pov prop?\n\t\t\"{owner.id}_{field.name.toUpperCase!}\"\n\n\tdef load key, value\n\t\tconsole.log 'Backlink load'\n\t\tself\n\n\tdef patch data\n\t\tconsole.log 'patching backlink!',data\n\t\tif plain\n\t\t\tfor own k,v of data\n\t\t\t\tlet v0 = plain[k]\n\t\t\t\tif v0 !== v\n\t\t\t\t\tload(k,v)\n\t\t\t\t\tplain[k] = v\n\t\telse\n\t\t\tplain = data\n\t\t\tfor own k,v of data\n\t\t\t\tconsole.log 'loading backlink',k,v\n\t\t\t\tload(k,v)\n\n\t\treturn self\n\t# def only filter\n\t#\tnew Models(self,filter)\n\t#\t# new Collection(sources: self,filters: filters)\n\nextend class OPObject\n\t# @template [T=any]\n\tdef @backlink\\BacklinkField<T> type\\T\n\t\tnew OPBacklinkField(type)"],"names":[],"mappings":"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"},"dependencies":[],"meta":{"vite":{"lang":"js"}}}
\No newline at end of file