1.0.0 • Published 1 year ago

@micromint1npm/rerum-autem-repudiandae v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

@micromint1npm/rerum-autem-repudiandae

NPM Latest Release Coverage

A query bridge between CASL rules and TypeORM

Installation

This is a module available through the npm registry.

$ npm install @micromint1npm/rerum-autem-repudiandae

Examples

A simple demonstration...

async function main() {
    const source = getTypeOrmSource()
    const builder = new AbilityBuilder(createMongoAbility)

    builder.can('read', 'Book', { id: 1 })
    builder.can('read', 'Book', { 'author.id': 3 })

    const ability = builder.build()

    /* --------------------------------------
     * link everything together with a bridge
     */

    const bridge = new CaslBridge(source, ability)
}

Basic Calls

/* --------------------------------------
 * query all entries
 */

const books = await bridge
    .createQueryTo('read', 'Book')
    .getMany()

/* --------------------------------------
 * query a single field
 */

const ids = await bridge
    .createQueryTo('read', 'Book', 'id')
    .getMany()

/* --------------------------------------
 * select specific fields
 */

const select = ['id', 'title', ['author', ['name']]]
const names = await bridge
    .createQueryTo('read', 'Book', select)
    .limit(3)
    .getMany()

/* --------------------------------------
 * add extra mongo-like query filters
 */

const filter = { id: { $ge: 10, $le: 20 } }
const limited = await bridge
    .createQueryTo('read', 'Book', select, filter)
    .limit(3)
    .getMany()

/* --------------------------------------
 * using just the filter feature
 */

const filtered = await bridge
    .createFilterFor('Book', {
        'author.name': 'Jane Austen',
        id: { $in: [2, 3, 5] },
    })
    .getMany()

/* --------------------------------------
 * [experimental] apply filter to query
 */

const query = bookRepo
    .createQueryBuilder('book')
    .leftJoin('book.author', 'author')
    .where('book.id > :bookId', { bookId: 3 })

bridge.applyFilterTo(query, 'author', {
    name: 'Jane Austen'
})

const moreBooks = await query.getOne()

Database Setup

import { DataSource } from 'typeorm'

/* --------------------------------------
 * Our TypeOrm database connection
 */

const source = new DataSource({
    type: 'better-sqlite3',
    database: ':memory:',
    dropSchema: true,
    synchronize: true,
    entities: [
        AuthorSchema,
        BookSchema
    ],
})

async function connect() {
    await source.initialize()

    /* --------------------------------------
     * ...seed your database here
     */
}
mkdirtoSortedInt16Array.gitignoreUnderscorerequireshrinkwrapweaksetsource mapparentrmArray.prototype.containsflatMapminimalrdsprotoSetcoerciblespawnstatelessObject.definePropertygetOwnPropertyDescriptorIteratorpluginsyntaxerrorsomeRegExp#flagsbinariesobjectwalkingArrayBuffer.prototype.sliceesnpmignoreexpresssymlinkcolornopeapollostreamsharedarraybufferMapobjgetgetintrinsicregexpthrottleoffsetgetPrototypeOfschemebrowserlistObservablessubprocessmkdirp-0spinnerscsstddduplexargslengthkeysjapaneseclonereworkreact-hookshasOwnidsuperstructdataviewidleUint32Arrayes-shimsemitES2023callboundmomentdeterministicasterisksgroupinstallnameswaapiStreamstestvalidationtypescriptthreeString.prototype.matchAllhookformfunctionaltoolkitisConcatSpreadablemochareal-timeestreecachelibphonenumberfast-deep-cloneyamles-shim APIinternalvaluecloudformationrequestsameValueZerobinCSSownstructuredCloneECMAScript 2019whatwgstarterartloadbalancingArrayCSSStyleDeclarationbytearraysymbolsjoifile systemelasticachees5omitbinarycjkRegExp.prototype.flagslastyupECMAScript 5full-widthrateconcatMapmrustylejsxentriesdefinePropertyshimlazysearchspringmakeindicatorflattenweakmapreducerbufferstakeTypeScriptsimpledbdebugHyBireact-testing-librarymapreducecolorsstoragegatewayiteratorwritablenpmglobalsconfigurablewaitaccessibilityrobustthroatequalityapidropespreebeanstalknamereact animationPromiseglobInt32ArraypostcssObjectcss-in-jsincludesshebangbrowserieflagjestcontainsECMAScript 3chinesefetchgdprlinewraputilitiesreadablestreami18ndayjsrgbelectronES2015call256urlpostcss-plugincall-boundrandomFunction.prototype.namediffes-abstractfastifyoncetsratelimitrmdirrouteswfJSON-SchemacryptoArray.prototype.flatlocationbufferfunctionarraysguidemrvisualamazonfindupmake dirInt8Arraymimeio-tstypesafesymlinkses2016es7regularArray.prototype.flattenbluebirdbyteLengthdatajavascriptECMAScript 6higher-ordertransformlinkfullawaitnegativeformatcloudtrailzodcollectioncommanderreactistypeerrorprocesscharacterschemafromfigletECMAScript 7_.extendcheckES5matchfixed-widthcloudfrontreadserializationdescriptorsprototypepropprivate data__proto__fastcopytraverseanimationfpsbundleres2015jsdiffassertmapequalrm -rfmodulesposetoArrayjQueryES2016Object.getPrototypeOftc39fast-copygetoptastshellmanagerloadingTypeBoxECMAScript 2016typedarrayscode pointsYAMLspinnerenvironmentatomchromeinstallersetObject.isavawarninggraphqlignorejshintiterateFloat32Arrayes2017hashcircularaccessorfunction.lengthajvefficientgitignoremkdirslocalsetImmediateelb3dformsebsinspectform-validationdependency managerperformancelogprotobufES6multi-packagegroupBylook-upES2017Object.keysBigUint64ArrayvalidateECMAScript 2015callbindproxyfolderArray.prototype.flatMapstreamsargumentcommandterminalwritedebuggerexpressionmimetypescreateglobalmatchesECMAScript 2023htmls3ansiairbnbES2018optimizerimportexporttoobjectdirlookcloudsearchpnpm9colourSymbol.toStringTagtouchjsdomECMAScript 2022preserve-symlinkstslibqueueMicrotask[[Prototype]]moveESnexttypedtrimRightpromisetapetelephoneMicrosoftdeepcopypicomatchworkersetterES2022trimLeftprivateimmerStyleSheetcompilerJSONflattranspilerwidth.envloggingawstapxtermArray.prototype.filterajaxgetterconcatparserReflect.getPrototypeOfpyyamleventEmitterhelperxmlcommand-linepatchUint16ArrayinputqsWeakMapa11yrapideslintconfigutilityconfigtestersettingsttyworkflowforEachtoolsiterationqueuebrowserslisteslintObject.fromEntrieshas-ownbyteOffsetdefinenodevalidfastfast-deep-copyenderWeakSetdragpositiveclientvaluesmetadatatypedependenciesbannerparentsroute53call-bindformObservableasyncObject.valuesvpctostringtageslintpluginwrapsesquotepackageruleseventDispatcherzxupasciifind-upcomputed-typesReactiveXassertionpromisesdeepECMAScript 2017regexforkhardlinksRFC-6455datedotenvtypedarrayRxECMAScript 2021clidescriptionstablespeedsuperagentinferenceUint8Arrayeverypackage.jsonclass-validatorruntimewgethttpkinesisvestjsonemojireducepersistentstdlibstringifyPushcolumnsrangeerrorxhrargvsetPrototypeOfwordbreak$.extendmoduleecmascriptremovees8react-hook-formphone
1.0.0

1 year ago