@webiny/project 0.0.0-unstable.ac6ebf63c6 → 0.0.0-unstable.df7a8bb475

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/project",
3
- "version": "0.0.0-unstable.ac6ebf63c6",
3
+ "version": "0.0.0-unstable.df7a8bb475",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -10,16 +10,16 @@
10
10
  "description": "An SDK for managing Webiny projects.",
11
11
  "license": "MIT",
12
12
  "dependencies": {
13
- "@webiny/aws-sdk": "0.0.0-unstable.ac6ebf63c6",
14
- "@webiny/build-tools": "0.0.0-unstable.ac6ebf63c6",
13
+ "@webiny/aws-sdk": "0.0.0-unstable.df7a8bb475",
14
+ "@webiny/build-tools": "0.0.0-unstable.df7a8bb475",
15
15
  "@webiny/di": "0.2.3",
16
- "@webiny/global-config": "0.0.0-unstable.ac6ebf63c6",
17
- "@webiny/pulumi-sdk": "0.0.0-unstable.ac6ebf63c6",
18
- "@webiny/react-properties": "0.0.0-unstable.ac6ebf63c6",
19
- "@webiny/system-requirements": "0.0.0-unstable.ac6ebf63c6",
20
- "@webiny/telemetry": "0.0.0-unstable.ac6ebf63c6",
21
- "@webiny/utils": "0.0.0-unstable.ac6ebf63c6",
22
- "@webiny/wcp": "0.0.0-unstable.ac6ebf63c6",
16
+ "@webiny/global-config": "0.0.0-unstable.df7a8bb475",
17
+ "@webiny/pulumi-sdk": "0.0.0-unstable.df7a8bb475",
18
+ "@webiny/react-properties": "0.0.0-unstable.df7a8bb475",
19
+ "@webiny/system-requirements": "0.0.0-unstable.df7a8bb475",
20
+ "@webiny/telemetry": "0.0.0-unstable.df7a8bb475",
21
+ "@webiny/utils": "0.0.0-unstable.df7a8bb475",
22
+ "@webiny/wcp": "0.0.0-unstable.df7a8bb475",
23
23
  "chalk": "4.1.2",
24
24
  "chokidar": "4.0.3",
25
25
  "ci-info": "4.4.0",
@@ -75,5 +75,5 @@
75
75
  "access": "public",
76
76
  "directory": "dist"
77
77
  },
78
- "gitHead": "ac6ebf63c6de308703d41f2c1b375e03cd96b813"
78
+ "gitHead": "df7a8bb4755a1da047f0af8c56bdb649cc81bf7d"
79
79
  }
@@ -18,7 +18,7 @@ const getVersionFromVersionFolders = async (versionFoldersList, currentWebinyVer
18
18
  let versionToUse = "";
19
19
 
20
20
  // When developing Webiny, we want to use the latest version.
21
- if (currentWebinyVersion === WEBINY_DEV_VERSION) {
21
+ if (currentWebinyVersion.startsWith(WEBINY_DEV_VERSION)) {
22
22
  versionToUse = availableVersions[availableVersions.length - 1];
23
23
  } else {
24
24
  for (const availableVersion of availableVersions) {
@@ -1 +1 @@
1
- {"version":3,"names":["os","path","fs","fsAsync","loadJsonFile","createImplementation","InstallExtensionService","GetProjectVersionService","GetProjectService","downloadFolderFromS3","mergePackageJson","updateWebinyConfig","EXTENSIONS_ROOT_FOLDER","S3_BUCKET_NAME","S3_BUCKET_REGION","FOLDER_NAME_IS_VERSION_REGEX","WEBINY_DEV_VERSION","getVersionFromVersionFolders","versionFoldersList","currentWebinyVersion","availableVersions","filter","v","match","map","replace","sort","versionToUse","length","availableVersion","DefaultInstallExtensionService","constructor","getProjectVersion","getProject","execute","source","project","projectRoot","paths","rootFolder","toString","randomId","String","Date","now","downloadFolderPath","join","tmpdir","isLocalPath","startsWith","resolvedPath","isAbsolute","resolve","cp","recursive","bucketName","bucketRegion","bucketFolderKey","extensionsFolderToCopyPath","extensionJsonPath","extensionsFolderExistsInRoot","existsSync","versionedExtension","versionFolders","readdir","subExtensionJsonPath","extensionJsonExists","extensionJson","name","type","targetExtensionsFolder","mkdirSync","extensionsFolderNames","extensionPaths","packageJson","Object","keys","extensionPackageJson","webinyConfigTsx","nextSteps","messages","additionalNotes","extensionName","installExtensionService","abstraction","implementation","dependencies"],"sources":["InstallExtensionService.ts"],"sourcesContent":["import os from \"os\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport fsAsync from \"fs/promises\";\nimport loadJsonFile from \"load-json-file\";\nimport { createImplementation } from \"@webiny/di\";\nimport {\n InstallExtensionService,\n GetProjectVersionService,\n GetProjectService\n} from \"~/abstractions/index.js\";\nimport { downloadFolderFromS3 } from \"./downloadFolderFromS3.js\";\nimport { mergePackageJson } from \"./mergePackageJson.js\";\nimport { updateWebinyConfig } from \"./updateWebinyConfig.js\";\nimport type { ExtensionJson } from \"./types.js\";\n\nconst EXTENSIONS_ROOT_FOLDER = \"extensions\";\nconst S3_BUCKET_NAME = \"webiny-examples\";\nconst S3_BUCKET_REGION = \"us-east-1\";\nconst FOLDER_NAME_IS_VERSION_REGEX = /^\\d+\\.\\d+\\.x$/;\nconst WEBINY_DEV_VERSION = \"0.0.0\";\n\nconst getVersionFromVersionFolders = async (\n versionFoldersList: string[],\n currentWebinyVersion: string\n) => {\n const availableVersions = versionFoldersList\n .filter(v => v.match(FOLDER_NAME_IS_VERSION_REGEX))\n .map(v => v.replace(/\\.x$/, \".0\"))\n .sort();\n\n let versionToUse = \"\";\n\n // When developing Webiny, we want to use the latest version.\n if (currentWebinyVersion === WEBINY_DEV_VERSION) {\n versionToUse = availableVersions[availableVersions.length - 1];\n } else {\n for (const availableVersion of availableVersions) {\n if (currentWebinyVersion >= availableVersion) {\n versionToUse = availableVersion;\n } else {\n break;\n }\n }\n }\n\n return versionToUse.replace(/\\.0$/, \".x\");\n};\n\nclass DefaultInstallExtensionService implements InstallExtensionService.Interface {\n constructor(\n private getProjectVersion: GetProjectVersionService.Interface,\n private getProject: GetProjectService.Interface\n ) {}\n\n async execute(source: string): Promise<InstallExtensionService.Result> {\n const currentWebinyVersion = this.getProjectVersion.execute();\n const project = this.getProject.execute();\n const projectRoot = project.paths.rootFolder.toString();\n\n const randomId = String(Date.now());\n const downloadFolderPath = path.join(os.tmpdir(), `wby-ext-${randomId}`);\n\n // Check if source is a local path\n const isLocalPath =\n source.startsWith(\"../\") || source.startsWith(\"./\") || source.startsWith(\"/\");\n\n if (isLocalPath) {\n // Resolve the local path relative to the project root\n const resolvedPath = path.isAbsolute(source)\n ? source\n : path.resolve(projectRoot, source);\n\n // Copy the local directory to the temporary download folder\n await fsAsync.cp(resolvedPath, downloadFolderPath, {\n recursive: true\n });\n } else {\n // Download from S3\n await downloadFolderFromS3({\n bucketName: S3_BUCKET_NAME,\n bucketRegion: S3_BUCKET_REGION,\n bucketFolderKey: source,\n downloadFolderPath\n });\n }\n\n let extensionsFolderToCopyPath = path.join(downloadFolderPath, \"extensions\");\n let extensionJsonPath = path.join(downloadFolderPath, \"extension.json\");\n\n // If we have `extensions` folder in the root of the downloaded extension,\n // it means the extension is not versioned, and we can just copy it.\n const extensionsFolderExistsInRoot = fs.existsSync(extensionsFolderToCopyPath);\n const versionedExtension = !extensionsFolderExistsInRoot;\n\n if (versionedExtension) {\n // If we have `x.x.x` folders in the root of the downloaded\n // extension, we need to find the right version to use.\n\n // This can be `5.40.x`, `6.0.x`, etc.\n const versionFolders = await fsAsync.readdir(downloadFolderPath);\n\n const versionToUse = await getVersionFromVersionFolders(\n versionFolders,\n currentWebinyVersion\n );\n\n extensionsFolderToCopyPath = path.join(downloadFolderPath, versionToUse, \"extensions\");\n const subExtensionJsonPath = path.join(\n downloadFolderPath,\n versionToUse,\n \"extension.json\"\n );\n if (fs.existsSync(subExtensionJsonPath)) {\n extensionJsonPath = subExtensionJsonPath;\n }\n }\n\n // Read and parse extension.json.\n const extensionJsonExists = fs.existsSync(extensionJsonPath);\n const extensionJson: ExtensionJson = extensionJsonExists\n ? await loadJsonFile(extensionJsonPath)\n : { name: \"unknown\", type: \"admin\" };\n\n // Ensure the extensions root folder exists.\n const targetExtensionsFolder = path.join(projectRoot, EXTENSIONS_ROOT_FOLDER);\n if (!fs.existsSync(targetExtensionsFolder)) {\n fs.mkdirSync(targetExtensionsFolder, { recursive: true });\n }\n\n // Copy the extensions folder contents.\n await fsAsync.cp(extensionsFolderToCopyPath, targetExtensionsFolder, {\n recursive: true\n });\n\n // Get the list of extensions that were copied.\n const extensionsFolderNames = await fsAsync.readdir(extensionsFolderToCopyPath);\n const extensionPaths = extensionsFolderNames.map(name =>\n path.join(EXTENSIONS_ROOT_FOLDER, name)\n );\n\n // Merge package.json if provided.\n if (extensionJson.packageJson && Object.keys(extensionJson.packageJson).length > 0) {\n await mergePackageJson({\n projectRoot,\n extensionPackageJson: extensionJson.packageJson\n });\n }\n\n // Update webiny.config.tsx if provided.\n if (extensionJson.webinyConfigTsx) {\n await updateWebinyConfig({\n projectRoot,\n webinyConfigTsx: extensionJson.webinyConfigTsx\n });\n }\n\n // Extract next steps and additional notes.\n const nextSteps = extensionJson.nextSteps?.messages || [];\n const additionalNotes = extensionJson.additionalNotes?.messages || [];\n\n return {\n extensionName: extensionJson.name,\n extensionPaths,\n nextSteps,\n additionalNotes\n };\n }\n}\n\nexport const installExtensionService = createImplementation({\n abstraction: InstallExtensionService,\n implementation: DefaultInstallExtensionService,\n dependencies: [GetProjectVersionService, GetProjectService]\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["os","path","fs","fsAsync","loadJsonFile","createImplementation","InstallExtensionService","GetProjectVersionService","GetProjectService","downloadFolderFromS3","mergePackageJson","updateWebinyConfig","EXTENSIONS_ROOT_FOLDER","S3_BUCKET_NAME","S3_BUCKET_REGION","FOLDER_NAME_IS_VERSION_REGEX","WEBINY_DEV_VERSION","getVersionFromVersionFolders","versionFoldersList","currentWebinyVersion","availableVersions","filter","v","match","map","replace","sort","versionToUse","startsWith","length","availableVersion","DefaultInstallExtensionService","constructor","getProjectVersion","getProject","execute","source","project","projectRoot","paths","rootFolder","toString","randomId","String","Date","now","downloadFolderPath","join","tmpdir","isLocalPath","resolvedPath","isAbsolute","resolve","cp","recursive","bucketName","bucketRegion","bucketFolderKey","extensionsFolderToCopyPath","extensionJsonPath","extensionsFolderExistsInRoot","existsSync","versionedExtension","versionFolders","readdir","subExtensionJsonPath","extensionJsonExists","extensionJson","name","type","targetExtensionsFolder","mkdirSync","extensionsFolderNames","extensionPaths","packageJson","Object","keys","extensionPackageJson","webinyConfigTsx","nextSteps","messages","additionalNotes","extensionName","installExtensionService","abstraction","implementation","dependencies"],"sources":["InstallExtensionService.ts"],"sourcesContent":["import os from \"os\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport fsAsync from \"fs/promises\";\nimport loadJsonFile from \"load-json-file\";\nimport { createImplementation } from \"@webiny/di\";\nimport {\n InstallExtensionService,\n GetProjectVersionService,\n GetProjectService\n} from \"~/abstractions/index.js\";\nimport { downloadFolderFromS3 } from \"./downloadFolderFromS3.js\";\nimport { mergePackageJson } from \"./mergePackageJson.js\";\nimport { updateWebinyConfig } from \"./updateWebinyConfig.js\";\nimport type { ExtensionJson } from \"./types.js\";\n\nconst EXTENSIONS_ROOT_FOLDER = \"extensions\";\nconst S3_BUCKET_NAME = \"webiny-examples\";\nconst S3_BUCKET_REGION = \"us-east-1\";\nconst FOLDER_NAME_IS_VERSION_REGEX = /^\\d+\\.\\d+\\.x$/;\nconst WEBINY_DEV_VERSION = \"0.0.0\";\n\nconst getVersionFromVersionFolders = async (\n versionFoldersList: string[],\n currentWebinyVersion: string\n) => {\n const availableVersions = versionFoldersList\n .filter(v => v.match(FOLDER_NAME_IS_VERSION_REGEX))\n .map(v => v.replace(/\\.x$/, \".0\"))\n .sort();\n\n let versionToUse = \"\";\n\n // When developing Webiny, we want to use the latest version.\n if (currentWebinyVersion.startsWith(WEBINY_DEV_VERSION)) {\n versionToUse = availableVersions[availableVersions.length - 1];\n } else {\n for (const availableVersion of availableVersions) {\n if (currentWebinyVersion >= availableVersion) {\n versionToUse = availableVersion;\n } else {\n break;\n }\n }\n }\n\n return versionToUse.replace(/\\.0$/, \".x\");\n};\n\nclass DefaultInstallExtensionService implements InstallExtensionService.Interface {\n constructor(\n private getProjectVersion: GetProjectVersionService.Interface,\n private getProject: GetProjectService.Interface\n ) {}\n\n async execute(source: string): Promise<InstallExtensionService.Result> {\n const currentWebinyVersion = this.getProjectVersion.execute();\n const project = this.getProject.execute();\n const projectRoot = project.paths.rootFolder.toString();\n\n const randomId = String(Date.now());\n const downloadFolderPath = path.join(os.tmpdir(), `wby-ext-${randomId}`);\n\n // Check if source is a local path\n const isLocalPath =\n source.startsWith(\"../\") || source.startsWith(\"./\") || source.startsWith(\"/\");\n\n if (isLocalPath) {\n // Resolve the local path relative to the project root\n const resolvedPath = path.isAbsolute(source)\n ? source\n : path.resolve(projectRoot, source);\n\n // Copy the local directory to the temporary download folder\n await fsAsync.cp(resolvedPath, downloadFolderPath, {\n recursive: true\n });\n } else {\n // Download from S3\n await downloadFolderFromS3({\n bucketName: S3_BUCKET_NAME,\n bucketRegion: S3_BUCKET_REGION,\n bucketFolderKey: source,\n downloadFolderPath\n });\n }\n\n let extensionsFolderToCopyPath = path.join(downloadFolderPath, \"extensions\");\n let extensionJsonPath = path.join(downloadFolderPath, \"extension.json\");\n\n // If we have `extensions` folder in the root of the downloaded extension,\n // it means the extension is not versioned, and we can just copy it.\n const extensionsFolderExistsInRoot = fs.existsSync(extensionsFolderToCopyPath);\n const versionedExtension = !extensionsFolderExistsInRoot;\n\n if (versionedExtension) {\n // If we have `x.x.x` folders in the root of the downloaded\n // extension, we need to find the right version to use.\n\n // This can be `5.40.x`, `6.0.x`, etc.\n const versionFolders = await fsAsync.readdir(downloadFolderPath);\n\n const versionToUse = await getVersionFromVersionFolders(\n versionFolders,\n currentWebinyVersion\n );\n\n extensionsFolderToCopyPath = path.join(downloadFolderPath, versionToUse, \"extensions\");\n const subExtensionJsonPath = path.join(\n downloadFolderPath,\n versionToUse,\n \"extension.json\"\n );\n if (fs.existsSync(subExtensionJsonPath)) {\n extensionJsonPath = subExtensionJsonPath;\n }\n }\n\n // Read and parse extension.json.\n const extensionJsonExists = fs.existsSync(extensionJsonPath);\n const extensionJson: ExtensionJson = extensionJsonExists\n ? await loadJsonFile(extensionJsonPath)\n : { name: \"unknown\", type: \"admin\" };\n\n // Ensure the extensions root folder exists.\n const targetExtensionsFolder = path.join(projectRoot, EXTENSIONS_ROOT_FOLDER);\n if (!fs.existsSync(targetExtensionsFolder)) {\n fs.mkdirSync(targetExtensionsFolder, { recursive: true });\n }\n\n // Copy the extensions folder contents.\n await fsAsync.cp(extensionsFolderToCopyPath, targetExtensionsFolder, {\n recursive: true\n });\n\n // Get the list of extensions that were copied.\n const extensionsFolderNames = await fsAsync.readdir(extensionsFolderToCopyPath);\n const extensionPaths = extensionsFolderNames.map(name =>\n path.join(EXTENSIONS_ROOT_FOLDER, name)\n );\n\n // Merge package.json if provided.\n if (extensionJson.packageJson && Object.keys(extensionJson.packageJson).length > 0) {\n await mergePackageJson({\n projectRoot,\n extensionPackageJson: extensionJson.packageJson\n });\n }\n\n // Update webiny.config.tsx if provided.\n if (extensionJson.webinyConfigTsx) {\n await updateWebinyConfig({\n projectRoot,\n webinyConfigTsx: extensionJson.webinyConfigTsx\n });\n }\n\n // Extract next steps and additional notes.\n const nextSteps = extensionJson.nextSteps?.messages || [];\n const additionalNotes = extensionJson.additionalNotes?.messages || [];\n\n return {\n extensionName: extensionJson.name,\n extensionPaths,\n nextSteps,\n additionalNotes\n };\n }\n}\n\nexport const installExtensionService = createImplementation({\n abstraction: InstallExtensionService,\n implementation: DefaultInstallExtensionService,\n dependencies: [GetProjectVersionService, GetProjectService]\n});\n"],"mappings":"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","ignoreList":[]}