| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- __package__ = 'archivebox.plugins_pkg.npm'
- from pathlib import Path
- from typing import List, Optional
- from pydantic import InstanceOf, model_validator
- from pydantic_pkgr import BinProvider, NpmProvider, BinName, PATHStr, BinProviderName
- from archivebox.config import DATA_DIR, CONSTANTS
- from abx.archivebox.base_plugin import BasePlugin
- from abx.archivebox.base_configset import BaseConfigSet
- from abx.archivebox.base_binary import BaseBinary, BaseBinProvider, env, apt, brew
- from abx.archivebox.base_hook import BaseHook
- ###################### Config ##########################
- class NpmDependencyConfigs(BaseConfigSet):
- # USE_NPM: bool = True
- # NPM_BINARY: str = Field(default='npm')
- # NPM_ARGS: Optional[List[str]] = Field(default=None)
- # NPM_EXTRA_ARGS: List[str] = []
- # NPM_DEFAULT_ARGS: List[str] = []
- pass
- DEFAULT_GLOBAL_CONFIG = {
- }
- NPM_CONFIG = NpmDependencyConfigs(**DEFAULT_GLOBAL_CONFIG)
- OLD_NODE_BIN_PATH = DATA_DIR / 'node_modules' / '.bin'
- NEW_NODE_BIN_PATH = CONSTANTS.LIB_NPM_DIR / 'node_modules' / '.bin'
- class SystemNpmProvider(NpmProvider, BaseBinProvider):
- name: BinProviderName = "sys_npm"
-
- npm_prefix: Optional[Path] = None
- class LibNpmProvider(NpmProvider, BaseBinProvider):
- name: BinProviderName = "lib_npm"
- PATH: PATHStr = str(OLD_NODE_BIN_PATH)
-
- npm_prefix: Optional[Path] = CONSTANTS.LIB_NPM_DIR
-
- @model_validator(mode='after')
- def validate_path(self):
- assert self.npm_prefix == NEW_NODE_BIN_PATH.parent.parent
- return self
- SYS_NPM_BINPROVIDER = SystemNpmProvider()
- LIB_NPM_BINPROVIDER = LibNpmProvider()
- npm = LIB_NPM_BINPROVIDER
- class NpmBinary(BaseBinary):
- name: BinName = 'npm'
- binproviders_supported: List[InstanceOf[BinProvider]] = [apt, brew, env]
- NPM_BINARY = NpmBinary()
- class NodeBinary(BaseBinary):
- name: BinName = 'node'
- binproviders_supported: List[InstanceOf[BinProvider]] = [apt, brew, env]
- NODE_BINARY = NodeBinary()
- class NpmPlugin(BasePlugin):
- app_label: str = 'npm'
- verbose_name: str = 'NPM'
-
- hooks: List[InstanceOf[BaseHook]] = [
- NPM_CONFIG,
- SYS_NPM_BINPROVIDER,
- LIB_NPM_BINPROVIDER,
- NODE_BINARY,
- NPM_BINARY,
- ]
- PLUGIN = NpmPlugin()
- # PLUGIN.register(settings)
- DJANGO_APP = PLUGIN.AppConfig
|