@tko/builder
Advanced tools
+2
-1
@@ -1,2 +0,2 @@ | ||
| // @tko/builder 🥊 4.0.0 ESM | ||
| // @tko/builder 🥊 4.0.1 ESM | ||
| "use strict"; | ||
@@ -178,2 +178,3 @@ import { | ||
| export class Builder { | ||
| providedProperties; | ||
| constructor({ provider, bindings, extenders, filters, options: options2 }) { | ||
@@ -180,0 +181,0 @@ Object.assign(knockout.options, options2, { filters, bindingProviderInstance: provider }); |
@@ -5,4 +5,4 @@ { | ||
| "sourcesContent": ["/**\n * A class to create the global knockout instance (ko).\n */\n\nimport {\n addDisposeCallback,\n addOrRemoveItem,\n arrayFilter,\n arrayFirst,\n arrayForEach,\n arrayGetDistinctValues,\n arrayIndexOf,\n arrayMap,\n arrayPushAll,\n arrayRemoveItem,\n addCleaner,\n cleanNode,\n cloneNodes,\n compareArrays,\n createSymbolOrString,\n domData,\n extend,\n memoization,\n objectForEach,\n objectMap,\n options,\n parseHtmlFragment,\n parseJson,\n range,\n registerEventHandler,\n removeCleaner,\n removeDisposeCallback,\n removeNode,\n selectExtensions,\n setHtml,\n setTextContent,\n tasks,\n toggleDomNodeCssClass,\n triggerEvent,\n virtualElements\n} from '@tko/utils'\n\nimport { parseObjectLiteral } from '@tko/utils.parser'\n\nimport { LifeCycle } from '@tko/lifecycle'\n\nimport {\n // applyExtenders,\n // arrayChangeEventName,\n // deferUpdates,\n dependencyDetection,\n extenders as defaultExtenders,\n isObservable,\n isSubscribable,\n isWriteableObservable,\n observable,\n observableArray,\n isObservableArray,\n peek,\n subscribable,\n toJS,\n toJSON,\n unwrap\n} from '@tko/observable'\n\nimport { computed, isComputed, isPureComputed, proxy, pureComputed, when } from '@tko/computed'\n\nimport {\n applyBindingAccessorsToNode,\n applyBindings,\n applyBindingsToDescendants,\n applyBindingsToNode,\n contextFor,\n dataFor,\n bindingEvent,\n BindingHandler,\n AsyncBindingHandler,\n setDomNodeChildrenFromArrayMapping\n} from '@tko/bind'\n\nimport {\n anonymousTemplate,\n domElement,\n nativeTemplateEngine,\n renderTemplate,\n setTemplateEngine,\n templateEngine\n // templateSources\n} from '@tko/binding.template'\n\nimport type { BindingHandlerObject } from '@tko/provider'\n\nconst domNodeDisposal = {\n addDisposeCallback,\n removeDisposeCallback,\n removeNode,\n addCleaner,\n removeCleaner,\n get cleanExternalData() {\n return options.cleanExternalData\n },\n set cleanExternalData(cleanerFn) {\n options.set('cleanExternalData', cleanerFn)\n }\n}\n\nexport type Utils = {\n addOrRemoveItem: typeof addOrRemoveItem\n arrayFilter: typeof arrayFilter\n arrayFirst: typeof arrayFirst\n arrayForEach: typeof arrayForEach\n arrayGetDistinctValues: typeof arrayGetDistinctValues\n arrayIndexOf: typeof arrayIndexOf\n arrayMap: typeof arrayMap\n arrayPushAll: typeof arrayPushAll\n arrayRemoveItem: typeof arrayRemoveItem\n cloneNodes: typeof cloneNodes\n compareArrays: typeof compareArrays\n createSymbolOrString: typeof createSymbolOrString\n domData: typeof domData\n domNodeDisposal: typeof domNodeDisposal\n extend: typeof extend\n filters: typeof options.filters\n objectForEach: typeof objectForEach\n objectMap: typeof objectMap\n parseHtmlFragment: typeof parseHtmlFragment\n parseJson: typeof parseJson\n parseObjectLiteral: typeof parseObjectLiteral\n peekObservable: typeof peek\n range: typeof range\n registerEventHandler: typeof registerEventHandler\n setDomNodeChildrenFromArrayMapping: typeof setDomNodeChildrenFromArrayMapping\n setHtml: typeof setHtml\n setTextContent: typeof setTextContent\n toggleDomNodeCssClass: typeof toggleDomNodeCssClass\n triggerEvent: typeof triggerEvent\n unwrapObservable: typeof unwrap\n}\n\nconst utils: Utils = {\n addOrRemoveItem,\n arrayFilter,\n arrayFirst,\n arrayForEach,\n arrayGetDistinctValues,\n arrayIndexOf,\n arrayMap,\n arrayPushAll,\n arrayRemoveItem,\n cloneNodes,\n compareArrays,\n createSymbolOrString,\n domData,\n domNodeDisposal,\n extend,\n filters: options.filters,\n objectForEach,\n objectMap,\n parseHtmlFragment,\n parseJson,\n parseObjectLiteral,\n peekObservable: peek,\n range,\n registerEventHandler,\n setDomNodeChildrenFromArrayMapping,\n setHtml,\n setTextContent,\n toggleDomNodeCssClass,\n triggerEvent,\n unwrapObservable: unwrap\n}\n\nexport type KnockoutInstance = {\n // --- Utilities ---\n cleanNode: typeof cleanNode\n dependencyDetection: typeof dependencyDetection\n computedContext: typeof dependencyDetection\n filters: typeof options.filters\n ignoreDependencies: typeof dependencyDetection.ignore\n memoization: typeof memoization\n options: typeof options\n removeNode: typeof removeNode\n selectExtensions: typeof selectExtensions\n tasks: typeof tasks\n utils: typeof utils\n LifeCycle: typeof LifeCycle\n\n // -- Observable ---\n isObservable: typeof isObservable\n isSubscribable: typeof isSubscribable\n isWriteableObservable: typeof isWriteableObservable\n isWritableObservable: typeof isWriteableObservable\n observable: typeof observable\n observableArray: typeof observableArray\n isObservableArray: typeof isObservableArray\n peek: typeof peek\n subscribable: typeof subscribable\n unwrap: typeof unwrap\n toJS: typeof toJS\n toJSON: typeof toJSON\n proxy: typeof proxy\n\n // ... Computed ...\n computed: typeof computed\n dependentObservable: typeof computed\n isComputed: typeof isComputed\n isPureComputed: typeof isPureComputed\n pureComputed: typeof pureComputed\n when: typeof when\n\n // --- Templates ---\n nativeTemplateEngine: typeof nativeTemplateEngine\n renderTemplate: typeof renderTemplate\n setTemplateEngine: typeof setTemplateEngine\n templateEngine: typeof templateEngine\n templateSources: { domElement: typeof domElement; anonymousTemplate: typeof anonymousTemplate }\n\n // --- Binding ---\n applyBindingAccessorsToNode: typeof applyBindingAccessorsToNode\n applyBindings: typeof applyBindings\n applyBindingsToDescendants: typeof applyBindingsToDescendants\n applyBindingsToNode: typeof applyBindingsToNode\n contextFor: typeof contextFor\n dataFor: typeof dataFor\n BindingHandler: typeof BindingHandler\n AsyncBindingHandler: typeof AsyncBindingHandler\n virtualElements: typeof virtualElements\n domNodeDisposal: typeof domNodeDisposal\n bindingEvent: typeof bindingEvent\n}\n\nconst knockout: KnockoutInstance = {\n // --- Utilities ---\n cleanNode,\n dependencyDetection,\n computedContext: dependencyDetection,\n filters: options.filters,\n ignoreDependencies: dependencyDetection.ignore,\n memoization,\n options,\n removeNode,\n selectExtensions,\n tasks,\n utils,\n LifeCycle,\n\n // -- Observable ---\n isObservable,\n isSubscribable,\n isWriteableObservable,\n isWritableObservable: isWriteableObservable,\n observable,\n observableArray,\n isObservableArray,\n peek,\n subscribable,\n unwrap,\n toJS,\n toJSON,\n proxy,\n\n // ... Computed ...\n computed,\n dependentObservable: computed,\n isComputed,\n isPureComputed,\n pureComputed,\n when: when,\n\n // --- Templates ---\n nativeTemplateEngine,\n renderTemplate,\n setTemplateEngine,\n templateEngine,\n templateSources: { domElement, anonymousTemplate },\n\n // --- Binding ---\n applyBindingAccessorsToNode,\n applyBindings,\n applyBindingsToDescendants,\n applyBindingsToNode,\n contextFor,\n dataFor,\n BindingHandler,\n AsyncBindingHandler,\n virtualElements,\n domNodeDisposal,\n bindingEvent\n}\n\nexport class Builder {\n providedProperties: { extenders: any; bindingHandlers: BindingHandlerObject; bindingProvider: any }\n\n constructor({ provider, bindings, extenders, filters, options }) {\n Object.assign(knockout.options, options, { filters, bindingProviderInstance: provider })\n\n provider.setGlobals(knockout.options.bindingGlobals)\n\n if (Array.isArray(bindings)) {\n for (const bindingsObject of bindings) {\n provider.bindingHandlers.set(bindingsObject)\n }\n } else {\n provider.bindingHandlers.set(bindings)\n }\n\n this.providedProperties = {\n extenders: Object.assign(defaultExtenders, extenders),\n bindingHandlers: provider.bindingHandlers,\n bindingProvider: provider\n }\n }\n\n /**\n * @return {KnockoutInstance} An instance of Knockout.\n */\n create(...additionalProperties): KnockoutInstance {\n const instance: KnockoutInstance = Object.assign(\n {\n get getBindingHandler() {\n return options.getBindingHandler\n },\n set getBindingHandler(fn) {\n options.set('getBindingHandler', fn)\n }\n },\n knockout, //never change the order of these\n this.providedProperties,\n ...additionalProperties\n )\n\n instance.options.knockoutInstance = instance\n\n return instance\n }\n}\n"], | ||
| "mappings": "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", | ||
| "mappings": "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", | ||
| "names": ["options"] | ||
| } |
+2
-2
@@ -1,3 +0,3 @@ | ||
| // @tko/builder 🥊 4.0.0 ESM | ||
| // @tko/builder 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| export { Builder } from "./Builder"; | ||
| export { Builder } from "./Builder.js"; |
+2
-2
@@ -1,3 +0,3 @@ | ||
| // @tko/builder 🥊 4.0.0 MJS | ||
| // @tko/builder 🥊 4.0.1 MJS | ||
| "use strict"; | ||
| export { Builder } from "./Builder"; | ||
| export { Builder } from "./Builder.js"; |
+16
-17
| { | ||
| "version": "4.0.0", | ||
| "version": "4.0.1", | ||
| "name": "@tko/builder", | ||
@@ -12,9 +12,11 @@ "description": "Compile a customized instance of Knockout.", | ||
| "dependencies": { | ||
| "@tko/bind": "^4.0.0", | ||
| "@tko/computed": "^4.0.0", | ||
| "@tko/filter.punches": "^4.0.0", | ||
| "@tko/lifecycle": "^4.0.0", | ||
| "@tko/observable": "^4.0.0", | ||
| "@tko/utils": "^4.0.0", | ||
| "@tko/utils.parser": "^4.0.0", | ||
| "@tko/bind": "^4.0.1", | ||
| "@tko/binding.template": "^4.0.1", | ||
| "@tko/computed": "^4.0.1", | ||
| "@tko/filter.punches": "^4.0.1", | ||
| "@tko/lifecycle": "^4.0.1", | ||
| "@tko/observable": "^4.0.1", | ||
| "@tko/provider": "^4.0.1", | ||
| "@tko/utils": "^4.0.1", | ||
| "@tko/utils.parser": "^4.0.1", | ||
| "tslib": "^2.2.0" | ||
@@ -30,4 +32,3 @@ }, | ||
| "files": [ | ||
| "dist/", | ||
| "helpers/" | ||
| "dist/" | ||
| ], | ||
@@ -38,13 +39,11 @@ "exports": { | ||
| "import": "./dist/index.js" | ||
| }, | ||
| "./helpers/*": "./helpers/*" | ||
| } | ||
| }, | ||
| "karma": { | ||
| "frameworks": [ | ||
| "mocha" | ||
| ] | ||
| }, | ||
| "bugs": { | ||
| "url": "https://github.com/knockout/tko/issues" | ||
| }, | ||
| "module": "dist/index.js", | ||
| "scripts": { | ||
| "build": "bun ../../tools/build.ts" | ||
| } | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
35168
-92.36%10
25%396
-91.71%1
Infinity%+ Added
+ Added
Updated
Updated
Updated
Updated
Updated
Updated
Updated